【发布时间】:2016-05-13 09:17:16
【问题描述】:
是否可以让 Python 从其他来源(例如文件)连续读取标准输入?基本上我试图让我的脚本使用标准输入来回显输入,并且我想使用文件或外部源与之交互(同时保持打开状态)。
一个例子可能是(input.py):
#!/usr/bin/python
import sys
line = sys.stdin.readline()
while line:
print line,
line = sys.stdin.readline()
直接执行此操作,我可以连续输入文本,并在脚本保持活动状态时回显。如果您想使用外部源,例如文件或来自 bash 的输入,则脚本在收到输入后立即退出:
$ echo "hello" | python input.py
hello
$
最终我想做的是:
$ tail -f file | python input.py
然后,如果文件更新有 input.py 回显任何添加到文件中的内容,同时保持打开状态。也许我是用错误的方式接近这个,或者我只是一无所知,但是有没有办法做到这一点?
【问题讨论】:
-
你试过了吗?如果它不起作用,您可能会遇到缓冲问题 - have a look
-
它读取文件,但如果我更新文件,更改不会反映在 pythons 标准输入/标准输出中。
-
tail -f file将继续发出附加到文件的数据。附加到文件的更新工作......你是用其他方式做的吗? -
@RoryZipher Tail 只有在文件被附加到而不是更改时才会跟随。所以不是你会怎么做,vim。试试
echo "stuff" >> file测试一下。 -
是的,我正在附加文件。例如,如果文件包含“hello”,那么我运行命令,在下一行附加“world”文件并保存它,它不会显示在当前执行进程的标准输入/标准输出中。