Ros*_*hta 61 python subprocess python-2.7 python-3.x
我之间是完全糊涂了subprocess.call()
,subprocess.Popen()
,subprocess.check_call()
.
哪个是封锁哪个不是?
如果我用我的意思说的是subprocess.Popen()
父进程是否等待子进程return
/ exit
它继续执行之前.
shell=True
这些电话怎么影响?
unu*_*tbu 90
Popen
是非阻塞的.call
并且check_call
正在阻止.您可以Popen
通过调用其wait
或communicate
方法来创建实例块.
如果您查看源代码,您将看到call
调用Popen(...).wait()
,这就是它阻塞的原因.
check_call
电话call
,这也是它阻止的原因.
严格来说,shell=True
与阻塞问题是正交的.但是,shell=True
导致Python执行shell,然后在shell中运行该命令.如果您使用阻止呼叫,则在shell完成时将返回呼叫.由于shell可能会生成一个子进程来运行命令,因此shell可能会在生成的子进程之前完成.例如,
import subprocess
import time
proc = subprocess.Popen('ls -lRa /', shell=True)
time.sleep(3)
proc.terminate()
proc.wait()
Run Code Online (Sandbox Code Playgroud)
这里产生了两个进程:Popen生成一个运行shell的子进程.shell反过来产生一个子进程运行ls
. proc.terminate()
杀死shell,但子进程ls
仍在运行.(这是由丰富的输出表现,在python脚本结束后也.准备杀死ls
同pkill ls
.)
归档时间: |
|
查看次数: |
53246 次 |
最近记录: |