如何在 Python 3 中使用 stdin 将字符串传递给 subprocess.run

Ray*_*emi 8 subprocess python-3.x

这当然是在其他地方关于子流程的长期讨论的一部分。但答案很简单,应该打破。

如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在 stdin 上期望它的程序?

小智 11

通过input="whatever string you want"text=True前往subprocess.run

\n
import subprocess\nsubprocess.run("cat", input="foo\\n", text=True)\n
Run Code Online (Sandbox Code Playgroud)\n

根据文档subprocess.run

\n
\n

输入参数被传递到subprocess\xe2\x80\x99s stdin Popen.communicate()如果使用,它必须是字节序列,或者如果指定了编码错误或文本为 true,则它必须是字符串。Popen使用时,会自动使用 来创建内部对象stdin=PIPE,并且也可能不会使用stdin参数。

\n
\n

还要以字符串形式获取命令的输出,请添加capture_output=True

\n
subprocess.run("cat", input="foo\\n", capture_output=True, text=True)\n
Run Code Online (Sandbox Code Playgroud)\n


Ray*_*emi 6

最简单的例子,发送foocat并让它打印到屏幕上。

 import subprocess

 subprocess.run(['cat'],input=b'foo\n')
Run Code Online (Sandbox Code Playgroud)

请注意,您发送的是二进制数据和回车符。