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

Python: Obtain output using subprocess.call, not 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() 的文档中,我注意到的第一件事是:

Note:

Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.

接下来是文档中的第一行

Run the command described by args. Wait for command to complete, then return the returncode attribute.

subprocess.call 将 return "exit code",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()

...或类似的东西。