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

Owa*_*mad 3 python subprocess

大家好,谁能详细说明一下两者之间的区别

subprocess.Popen
subprocess.call
subprocess.check_output
Run Code Online (Sandbox Code Playgroud)

如果可能的话请解释一下 x.readlines()x.communicate()的区别?

即之间的差异

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

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

Dun*_*nno 5

callcheck_output(以及check_call) 只是Popen在幕后调用的实用函数。

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

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

在这里阅读更多内容