Jos*_*ian 5 python unix command-line buffer
我正在从unix上的命令行写入我的Python进程.我想发送EOF(或以某种方式刷新stdin缓冲区,因此Python可以读取我的输入.)
如果我按CTRL-C,我会得到一个KeyboardError.
如果我按下CTRL-D,程序就会停止.
如何刷新stdin缓冲区?
Ale*_*lli 12
Control-D不应该让你的程序"停止" - 它应该关闭标准输入,如果你的程序处理得当,它可以完美地继续,如果它需要!
例如,给出以下内容st.py
:
import sys
def main():
inwas = []
for line in sys.stdin:
inwas.append(line)
print "%d lines" % len(inwas),
print "initials:", ''.join(x[0] for x in inwas)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我们可以看到类似的东西
$ python st.py
nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura
che la diritta via era smarrita
3 lines initials: nmc
$
Run Code Online (Sandbox Code Playgroud)
如果控制-D在第三行输入后立即被击中 - 程序意识到标准输入已完成,并执行所需的后处理,所有都干净利落.
如果您的程序过早地退出控制-D,它必须编码很糟糕 - 如何编辑您的问题以添加您可以想到的最小的"行为不端"程序,这样我们就可以准确地告诉您如何出错?
如果您使用“for l in sys.stdin”,则会对其进行缓冲。
您可以使用:
while 1:
l = sys.stdin.readline()
Run Code Online (Sandbox Code Playgroud)