python3执行外部程序,多种方法
2021-03-13 本文已影响0人
SystemLight
初始代码
exec_code = "python ./lazy.py"
python_exe = r"C:\Users\Lisys\AppData\Local\Programs\Python\Python37\python.exe"
- 方法一:os.system
执行shell命令,阻塞父进程,无法和子进程交互
os.system(exec_code)
- 方法二:os.startfile
执行文件脚本,不阻塞父进程,无法和子进程交互
os.startfile("lazy.py")
- 方法三:os.spawnv
执行文件脚本,可设置不阻塞父进程,无法和子进程交互
os.spawnv(os.P_NOWAIT, python_exe, (python_exe, "./lazy.py"))
执行文件脚本,可设置阻塞父进程,无法和子进程交互
os.spawnv(os.P_WAIT, python_exe, (python_exe, "./lazy.py"))
- 方法四:os.popen
封装subprocess.Popen,不操作返回对象不会阻塞父进程会正确执行程序
os.popen(exec_code)
封装subprocess.Popen,调用返回对象的方法会阻塞父进程,可以与子进程交互
os.popen(exec_code).read()
- 方法五:subprocess.Popen
创建管道,读取阻塞父进程,可交互,可通过asyncio封装为异步函数
stream = io.BytesIO()
stream.close()
p = subprocess.Popen(exec_code, shell=True, stdout=subprocess.PIPE)
p.wait()
p.poll()