【发布时间】:2023-02-09 20:23:51
【问题描述】:
这肯定是作为 a 的一部分回答的长的其他地方关于子流程的讨论。但答案是如此简单,应该打破。
如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在标准输入上期望它的程序?
【问题讨论】:
标签: python python-3.x subprocess
这肯定是作为 a 的一部分回答的长的其他地方关于子流程的讨论。但答案是如此简单,应该打破。
如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在标准输入上期望它的程序?
【问题讨论】:
标签: python python-3.x subprocess
将input="whatever string you want"和text=True传递给subprocess.run:
import subprocess
subprocess.run("cat", input="foo
", text=True)
根据 subprocess.run 的文档:
这输入参数传递给
Popen.communicate(),从而传递给子进程的标准输入。如果使用它必须是一个字节序列,或者一个字符串如果编码或者错误指定或文本是真的。使用时,内部Popen对象自动创建为stdin=PIPE,并且标准输入也可能不会使用参数。要同时以字符串形式获取命令的输出,请添加
capture_output=True:subprocess.run("cat", input="foo ", capture_output=True, text=True)
【讨论】:
最简单的示例,将foo 发送到cat 并让它打印到屏幕上。
import subprocess
subprocess.run(['cat'],input=b'foo
')
请注意,您发送的是二进制数据和回车符。
【讨论】: