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

时间:2018-02-12 17:27:51

标签: python-3.x subprocess

这肯定是作为 long 关于其他地方的子进程的讨论的一部分而回答的。但答案很简单,应该打破。

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

2 个答案:

答案 0 :(得分:2)

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

 import subprocess

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

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

答案 1 :(得分:1)

text=Trueinput="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")