如何从Python写入stdout并同时(通过Unix管道)将其提供给另一个程序?例如,如果你有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
但是你想要逐行到另一个程序,例如| wc -l
以便输出myfile
中的行。怎么办?感谢。
答案 0 :(得分:7)
如果您想在外部将python
传递给wc
,那很容易,而且会起作用:
python myscript.py | wc -l
如果你想开球,那么它的输出都会被打印并被传送到wc
,请尝试man tee
,或者更好的是,你的shell内置花哨的重定向功能。
如果您希望从脚本中运行wc -l
,并将输出发送到stdout和它,那么您也可以这样做。
首先,使用subprocess.Popen
启动wc -l
:
wc = subprocess.Popen(['wc', '-l'], stdin=subprocess.PIPE)
现在,您可以这样做:
# write file line by line
with open("myfile") as f:
for line in f:
stripped = line.strip()
wc.stdin.write(stripped + '\n')
这将使wc
的输出与脚本的输出位置相同。如果那不是您想要的,您也可以将其stdout
作为PIPE。在这种情况下,您希望使用communicate
而不是尝试手动获取所有繁琐的详细信息。