[英]correct way to write to pipe line by line in Python
如何从Python写入stdout并同时(通过Unix管道)将其提供给另一个程序? 例如,如果你有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
但是您希望逐行到另一个程序,例如| wc -l
| wc -l
以便输出myfile
的行。 怎么办? 谢谢。
如果你想将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
管道。 在这种情况下,您希望使用communicate
而不是尝试手动获取所有繁琐的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.