gpt4 book ai didi

python - shell multipipe 被多个 python 脚本破坏

转载 作者:行者123 更新时间:2023-11-30 22:52:20 25 4
gpt4 key购买 nike

我正在尝试将 python 脚本的标准输出作为标准输入通过 shell 管道输入到另一个 python 脚本,如下所示:

find ~/test -name "*.txt" | python my_multitail.py | python line_parser.py

它应该打印输出,但没有任何结果。

请注意,这有效:

find ~/test -name "*.txt" | python my_multitail.py | cat

这也有效:

echo "bla" | python line_parser.py

my_multitail.py 打印出 .txt 文件的新内容:

from multitail import multitail
import sys

filenames = sys.stdin.readlines()
# we get rid of the trailing '\n'
for index, filename in enumerate(filenames):
filenames[index] = filename.rstrip('\n')

for fn, line in multitail(filenames):
print '%s: %s' % (fn, line),
sys.stdout.flush()

当新行添加到 .txt 文件(“hehe”)时,my_multitail.py 将打印:

/home/me/test2.txt: hehe

line_parser.py 只是打印出它在标准输入上得到的内容:

import sys

for line in sys.stdin:
print "line=", line

我一定缺少一些东西。请社区帮助我:)

最佳答案

如果您以交互方式运行 line_parser.py,则会出现提示:

$ python line_parser.py 
a
b
c
line= a

line= b

line= c

请注意,我在输入“c”后按 ctrl+D 来引发 EOF。您可以看到它在开始迭代各行之前会吸收所有输入。由于这是一个管道,并且您不断向其发送输出,因此这种情况不会发生,并且它永远不会开始处理。您需要选择一种不同的方式来迭代 stdin,例如:

import sys

line = sys.stdin.readline()
while line:
print "line=", line
line = sys.stdin.readline()

关于python - shell multipipe 被多个 python 脚本破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com