如何在Python中实时打印一条长线?

3

我正在使用Python脚本中的子进程打开一个.bat文件。这个.bat文件生成非常长的行,我希望实时将它们打印到控制台。

问题在于,有时这些行非常长,以至于不适合缓冲区。我该怎么办才能打印这些行呢?是否可以逐个单词地打印而不是逐行打印?

这是我的做法:

p = subprocess.Popen("testfile.bat", stdin=subprocess.PIPE)
p.stdin.write("\r\n") # Some basic setup (simulated keypress)
p.stdin.close() 

# The actual print loop
for line in iter(p.stdout.readline, ''):
        line = line.replace('\r', '').replace('\n', '')
        print(line)
        sys.stdout.flush()
1个回答

2
你可以移除这行文字,它不是必要的:
line = line.replace('\r', '').replace('\n', '')

如果您想逐字打印,请执行以下操作:

for line in iter(p.stdout.readline, ''):
    for word in line.split():
        print(word)
    sys.stdout.flush()

那么如何定义“line”呢? - user2426316
2
什么意思?“line”已经被定义了,它是循环中的迭代变量,你不需要做任何额外的事情:它已经是一行了! - Óscar López
我收到了“未定义变量:line”的错误。而迭代变量是“word”! - user2426316
你的回答非常令人困惑。你的解决方案是什么代码?这个for word in line.split(): print(word)不起作用。请提供一个可行的解决方案,否则我无法接受你的回答。 - user2426316
1
@user2426316 我以为你对这门语言更熟悉一些,抱歉。我已经更新了完整的代码到我的回答中。 - Óscar López
@user2426316 不用谢!再次抱歉第一次的解释不够清晰。祝好! - Óscar López

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接