4

如何从 Python 写入标准输出并同时(通过 Unix 管道)将其提供给另一个程序?例如,如果您有

# write file line by line
with open("myfile") as f:
  for line in f:
    print line.strip()

但是您希望它逐行转到另一个程序,例如| wc -l,以便它输出myfile. 怎么可能呢?谢谢。

4

1 回答 1

7

如果您想通过管道python连接到wc外部,这很容易,并且可以正常工作:

python myscript.py | wc -l

如果你想 tee 让它的输出被打印并被传送到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而不是尝试手动获取所有繁琐的细节。

于 2013-01-18T23:53:14.467 回答