子进程的输出未保存

时间:2014-05-21 03:02:12

标签: python command-line subprocess

当我在我的Popen中使用stdout和stdin时,我的进程不会运行。

def program():
    p = subprocess.Popen(link, shell=True, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
    out = p.communicate(longquery)
    print out

当我运行这个时,我的输出为(无,无),尽管我确实有一个输出显示在控制台上。为什么会发生这种情况?如何保存即将发布的输出?

2 个答案:

答案 0 :(得分:1)

您需要按the manual

管道输出数据

“在结果元组中得到除None以外的任何东西,你需要给stdout = PIPE和/或stderr = PIPE。”

def program():
    p = subprocess.Popen(link, shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    out = p.communicate(longquery)
    print out

答案 1 :(得分:0)

您还需要设置stdout=PIPE

将您的代码更改为:

from subprocess import Popen, PIPE, STDOUT


def program():
    p = Popen(link, shell=True, stdin=PIPE, stderr=STDOUT, stdout=PIPE)
    out = p.communicate(longquery)
    print out