【发布时间】:2018-07-22 22:59:43
【问题描述】:
这肯定是作为关于其他地方子流程的长时间讨论的一部分来回答的。但是答案太简单了,应该破解。
如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在标准输入上期望它的程序?
【问题讨论】:
标签: python-3.x subprocess
这肯定是作为关于其他地方子流程的长时间讨论的一部分来回答的。但是答案太简单了,应该破解。
如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在标准输入上期望它的程序?
【问题讨论】:
标签: python-3.x subprocess
将text=True 和input="whatever string you want" 传递给subprocess.run:
import subprocess
subprocess.run("cat", text=True, input="foo\n")
根据subprocess.run 的文档:
input 参数被传递给
Popen.communicate(),从而传递给子进程的标准输入。如果使用它必须是字节序列,或者如果指定了 encoding 或 errors 或 text 为真,则为字符串。使用时,内部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")
【讨论】:
最简单的例子,将foo 发送到cat 并让它打印到屏幕上。
import subprocess
subprocess.run(['cat'],input=b'foo\n')
注意你发送二进制数据和回车。
【讨论】: