python:字符串作为stdin到子命令

python:字符串作为stdin到子命令,python,shell,Python,Shell,我有一个python脚本,需要在其中调用shell命令。shell命令可以接受来自文件或stdin的输入 在我的脚本中,输入存储在一个变量中。调用命令的正确方式是什么?如果重要的话,shell命令不会产生任何输出 我知道我可以将变量的内容写入一个文件,并以该文件作为参数调用命令,但这似乎不雅观。当然,还有更好的办法 有人能告诉我是什么吗?谢谢。您可以使用该模块 指 对于python 3.5+(3.6+用于编码),可以使用输入: from subprocess import check_outpu

我有一个python脚本,需要在其中调用shell命令。shell命令可以接受来自文件或stdin的输入

在我的脚本中,输入存储在一个变量中。调用命令的正确方式是什么?如果重要的话,shell命令不会产生任何输出

我知道我可以将变量的内容写入一个文件,并以该文件作为参数调用命令,但这似乎不雅观。当然,还有更好的办法

有人能告诉我是什么吗?谢谢。

您可以使用该模块

对于python 3.5+(3.6+用于编码),可以使用输入:

from subprocess import check_output   
output = check_output(["cat","-b"],
        input="-foo\n-bar\n-foobar", encoding='ascii')
print(output)

“使用communicate()而不是.stdin.write、.stdout.read或.stderr.read,以避免由于任何其他操作系统管道缓冲区填满并阻塞子进程而导致死锁。”(From)@palvarez89 Good call。我修好了。
communicate()
是一种一次性的方法。为了反复这样做,我从它的实现中复制了一些代码,这些代码在一个单独的线程中处理
stdin
。@ivan_pozdeev我的回答确实使用了
process.stdin.write
,但正如palvarez89所提到的,这不是首选方法。OP提到试图
将变量的内容写入文件,并以文件作为参数调用命令。如果使用一次性方法是个问题,那就不会被建议。我认为这个答案对你会有帮助。你应该能够用谷歌搜索这个。可能的重复可能的重复
from subprocess import check_output   
output = check_output(["cat","-b"],
        input="-foo\n-bar\n-foobar", encoding='ascii')
print(output)