https://www.cnblogs.com/brt2/p/13232368.html
multiprocess: 是同一个代码中通过多进程调用其他的模块(也是自己写的)
subprocess: 直接调用外部的二进制程序,而非代码模块
subprocess
run/call() 函数均为主进程阻塞执行子进程,直到子进程调用完成返回;
subprocess.call("mv abc", shell=True) # depressed after python3.5
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False) -> subprocess.CompletedProcess
如果 shell=True ,则将通过shell执行指定的命令。如果你希望方便地访问其他shell功能,如shell管道、文件名通配符、环境变量扩展和扩展,例如 ~ 到用户的主目录,这会很有用。
# subprocess.run("ls | grep xxx".split(" "))
# 以上语句,无法获取到想要的结果,因为subprocess本身并不执行 `|` 管道符
subprocess.run("ls | grep xxx".split(" "), shell=True)
Popen, 非阻塞
class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(),
*, encoding=None, errors=None)
poll(): 检查进程是否终止,如果终止返回 returncode,否则返回 None。
wait(timeout): 等待子进程终止。
communicate(input,timeout): 和子进程交互,发送和读取数据。
send_signal(singnal): 发送信号到子进程 。
terminate(): 停止子进程,也就是发送SIGTERM信号到子进程。
kill(): 杀死子进程。发送 SIGKILL 信号到子进程。
网友评论