Python:使用subprocess.call而不是Popen获取输出



我有一个用Python脚本进行的系统调用。我想有一个定时器,以及利用呼叫的输出。我能够一次做一个:使用subprocess.call()实现计时器,并使用subprocess.Popen()检索输出。然而,我需要定时器和输出结果。

有什么办法做到这一点吗?

下面的代码给了我一个Attribute error: 'int' object has no attribute 'stdout',因为subprocess.call输出不是我需要使用的Popen对象。

... Open file here ...
try:
    result = subprocess.call(cmd, stdout=subprocess.PIPE, timeout=30)
    out = result.stdout.read()
    print (out)
except subprocess.TimeoutExpired as e:
    print ("Timed out!")
... Write to file here ...

如有任何帮助,我们将不胜感激。

subprocess.call()的文档中,我首先注意到的一件事是:

注:

不要将stdout=PIPE或stderr=PIPE与此函数一起使用。由于当前进程中没有读取管道,如果子进程向管道生成足够的输出以填充OS管道缓冲区,则它可能会阻塞。

接下来是文档中的第一行

运行args描述的命令。等待命令完成,然后返回returncode属性。

subprocess.call会返回"退出码",一个int,通常0=成功,1=出了问题,等等。

有关退出代码的更多信息。。。http://www.tldp.org/LDP/abs/html/exitcodes.html

由于您想要计时器的"输出",您可能需要恢复到

timer_out = subprocess.Popen(command, shell=True, stdout=PIPE, stderr=PIPE, universal_newlines=True)
stout, sterror = timer_out.communicate()

或者类似的东西。

最新更新