如何从Python写入stdout并同时(通过Unix管道)将其提供给另一个程序?例如,如果你有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
但是你希望它能逐行进入另一个程序,例如| wc -l,以便输出myfile中的行.怎么办?谢谢.
解决方法:
如果你想将python从外部传递给wc,那很简单,并且只会工作:
python myscript.py | wc -l
如果你想要开球,那么它的输出都会被打印并通过管道输送到wc,试试man tee,或者更好的是你的shell的内置花式重定向功能.
如果你想在脚本中运行wc -l,并将输出发送到stdout和它,你也可以这样做.
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的输出与脚本的输出位置相同.如果这不是你想要的,你也可以使它的标准输出管道.在这种情况下,您希望使用communicate而不是尝试手动获取所有繁琐的细节.
标签:python,shell,subprocess,unix,pipe