【问题标题】:Print output of external command in realtime and have it in a string at the same time in python实时打印外部命令的输出并在python中同时将其保存在一个字符串中
【发布时间】:2014-11-09 02:30:33
【问题描述】:

例如:

#!/usr/bin/env python3

# cmd.py

import time
for i in range(10):
    print("Count %d" % i)
    time.sleep(1)

#!/usr/bin/env python3

import subprocess

# useCmd.py

p = subprocess.Popen(['./cmd.py'], stdout=subprocess.PIPE)
out, err = p.communicate()
out = out.decode()
print(out)

在 useCmd.py 中,我可以打印出 cmd.py 的输出,但只有在它完成输出之后。我怎样才能实时打印出来并且仍然将它存储在一个字符串中? (有点像 bash 中的 tee。)

【问题讨论】:

    标签: python io subprocess


    【解决方案1】:

    如果您不必处理标准输入,则可以避免使用阻塞的communicate,并直接从进程标准输出中读取,直到标准输出结束:

    p = subprocess.Popen(['python', 'cmd.py'], stdout=subprocess.PIPE)
    # out, err = p.communicate()
    while True:
        line = p.stdout.readline()
        if line != '':
            print line,
        else:
            break
    

    related

    【讨论】:

    • 这根本不起作用。你自己测试过吗?
    • 是的,在 Python 2.7 中测试过
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2016-09-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多