Python 子进程读取

标签 python subprocess

有这个代码

p = subprocess.Popen('tail -f /var/log/syslog', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in p.stdout.readlines():
    print line,
    time.sleep(1)

脚本挂起并且不写入任何行,即使我向 syslog 添加内容也是如此。

为什么?

最佳答案

readlines() 不会返回,直到进程上有一个 eof,因为没有中断,tail 永远不会完成。

您可以将循环更改为:

while True:
    print(p.stdout.readline())

除非您希望每行之间有额外的 1s 间隔,否则不需要 sleep ,因为 readline 将阻塞,使用最少的资源,直到有完整的行可用。

关于Python 子进程读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745471/

相关文章:

python - Tweepy:AttributeError: 'tuple'对象没有属性 'followed_by'

python - 如何将多个语句放在一行中?

python - 带 Unittest 的 Flask-WTF/WTForms 验证失败,但没有 Unittest 也能工作

python - 从 python 启动多个二进制文件并监视它们的状态

python - 为什么我的 Pyinstaller exe 在其他计算机上启动 Java 程序时失败?

python - 将列表列表转换为整数列表

python - 如何按行对矩阵进行排序 - Python

php - 随后的 pcntl_signal 信号不会启动处理程序

python - 如何在 python cgi 脚本中捕获来自子进程的错误?

python - subprocess 会杀死子进程,但不会杀死子进程产生的进程