我有一个用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()
或者类似的东西。