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

问题描述 投票:0回答:2

如果我使用 Python 的

"foo"
,如何将字符串
subprocess.run()
传递给在标准输入上期望它的程序?

python python-3.x subprocess
2个回答
9
投票

通过

input="whatever string you want"
text=True
subprocess.run
:

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

根据

subprocess.run
的文档:

input参数被传递到

Popen.communicate()
,从而传递到子进程的标准输入。如果使用,它必须是字节序列,或者如果指定了 encodingerrorstext 为 true,则必须是字符串。使用时,会使用 Popen
 自动创建内部 
stdin=PIPE
 对象,并且也不能使用 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')

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

© www.soinside.com 2019 - 2024. All rights reserved.