代码之家  ›  专栏  ›  技术社区  ›  Nagri

如何通过subprocess运行一个非结束进程,并分别收集STDOUT和STDERR

  •  1
  • Nagri  · 技术社区  · 6 年前

    我有一个python程序 subprocess.Popen ,像这样;

    process = subprocess.Popen(stand_alone_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = process.communicate()
    print "out: ", out
    print "err: ", err
    

    如果我的 stand_alone_command 独立命令 正在抛出STDOUT和STDERR以便我可以记录它。

    1 回复  |  直到 5 年前
        1
  •  -1
  •   bivouac0    6 年前

    试着从stdout读取而不是打电话 communicate() 例如。。

    import subprocess
    sac = ['tail', '-f', '/var/log/syslog']
    process = subprocess.Popen(sac, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    while 1:
        line = process.stdout.readline()
        if line:
            print(line)
    

    shell=False 但我使用的是Linux和Windows有点不同。