如何使用stdin将字符串传递给subprocess.run?

18
如何在使用Python的subprocess.run()函数时,将字符串"foo"传递给期望从标准输入接收的程序?
2个回答

11

input="你想要的任何字符串"text=True传递给subprocess.run

import subprocess
subprocess.run("cat", input="foo\n", text=True)

根据 subprocess.run 文档:

传递给 Popen.communicate()input 参数将被传递到子进程的标准输入(stdin)。如果使用它,必须是字节序列。如果指定了 encodingerrors ,或者 text 为 True,则可以使用字符串。使用时,会自动创建带有 stdin=PIPE 的内部 Popen 对象,并且不能再使用 stdin 参数。

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

subprocess.run("cat", input="foo\n", capture_output=True, text=True)

6

这是最简单的示例,将foo发送到cat并让它打印到屏幕上。

 import subprocess

 subprocess.run(['cat'],input=b'foo\n')

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接