繁体   English   中英

在Python中逐行写入管道的正确方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM