子进程Popen / call / check_output之间的区别

时间:2017-01-13 10:39:42

标签: python subprocess

大家好,每个人都可以详细说明

之间的区别
subprocess.Popen
subprocess.call
subprocess.check_output

如果可能的话,请解释之间的区别 x.readlines()x.communicate()

,区别

import subprocess
from subprocess import PIPE
ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
**out = ls.stdout.readlines()**
print out

import subprocess
from subprocess import PIPE
ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
out = ls.communicate()
print out

1 个答案:

答案 0 :(得分:2)

callcheck_output(以及check_call)只是实用程序函数,可以在Popen下调用。

  • call返回子进程的退出代码
  • 如果退出代码非零,
  • check_call会引发CalledProcessError错误
  • check_output与上述相同,但也会返回输出。

readlinescommunicate之间的区别在于readlines只是在缓冲区(stdout)上创建的函数,而communication是一个进程类的方法,因此它可以处理不同的异常,您可以在其中传递输入,并等待该过程完成。

Read more here