这肯定是作为 long 关于其他地方的子进程的讨论的一部分而回答的。但答案很简单,应该打破。
如果我使用Python 3的subprocess.run(),如何将字符串“foo”传递给期望stdin的程序?
答案 0 :(得分:2)
最简单的示例,将foo
发送到cat
并将其打印到屏幕上。
import subprocess
subprocess.run(['cat'],input=b'foo\n')
请注意,您发送二进制数据和回车。
答案 1 :(得分:1)
将text=True
和input="whatever string you want"
传递到subprocess.run
:
import subprocess
subprocess.run("cat", text=True, input="foo\n")
根据subprocess.run
的文档:
input 参数传递给
Popen.communicate()
,从而传递给子进程的stdin。如果使用,则必须为字节序列,如果指定了 encoding 或 errors 或 text 为true,则为字符串。使用内部Popen
对象时,系统会自动使用stdin=PIPE
创建对象,并且 stdin 参数也可能无法使用。
universal_newlines
在Python 3.7中被重命名为text
,因此在旧版本中,您必须使用universal_newlines=True
而不是text=True
:
subprocess.run("cat", universal_newlines=True, input="foo\n")
,如果要将命令输出作为字符串,则可能需要添加capture_output=True
:
subprocess.run("cat", universal_newlines=True, capture_output=True, input="foo\n")