TenSuns 发表于 2022-11-9 00:03:00

Python同时执行多条shell命令

求助万能的uu们,
我现在知道
subprocess.run('cmd1', shell=True)
可以执行单条shell命令,如果是
subprocess.run('cmd1', shell=True)
subprocess.run('cmd2', shell=True)
则会顺序执行两条命令。
同时,我知道
subprocess.Popen('cmd1', shell=True)
subprocess.Popen('cmd2', shell=True)
可以同时执行两条命令,但是不会阻塞
我现在希望能同时执行两条shell命令,并保证两条命令执行完毕,再执行后续的代码,应该怎么办?

suchocolate 发表于 2022-11-9 00:03:01

本帖最后由 suchocolate 于 2022-11-9 00:22 编辑

c1 = subprocess.Popen('cmd1', shell=True)
c2 = subprocess.Popen('cmd2', shell=True)
c1.wait()
c2.wait()
另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。

TenSuns 发表于 2022-11-9 00:29:33

suchocolate 发表于 2022-11-9 00:20
另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。

谢谢您的解答,加了wait()命令已经完全可以解决我的问题。抱着学习的态度还想知道一下,multiprocessing库如何实现同时执行多条shell命令,并等待命令执行完毕再执行后续代码?

jackz007 发表于 2022-11-9 00:35:52

本帖最后由 jackz007 于 2022-11-9 00:40 编辑

      同时执行多条命令,命令之间用 && 连接即可,只有前面的命令正常结束才会执行后面的命令,否则,后面的命令会夭折。
os . system('cmd1 && cmd2')

suchocolate 发表于 2022-11-9 09:50:20

TenSuns 发表于 2022-11-9 00:29
谢谢您的解答,加了wait()命令已经完全可以解决我的问题。抱着学习的态度还想知道一下,multiprocessing ...

这个需要看看多线程和多进程相关的书。
菜鸟上只有简单的多线程:https://www.runoob.com/python3/python3-multithreading.html

suchocolate 发表于 2022-11-9 09:51:01

jackz007 发表于 2022-11-9 00:35
同时执行多条命令,命令之间用 && 连接即可,只有前面的命令正常结束才会执行后面的命令,否则,后 ...

我觉得; && || 都不算真正的同时

TenSuns 发表于 2022-11-9 10:32:26

非常感谢大家的解答,我又查找了一些资料,其实我并不要求绝对同时执行,只是想尽可能的同时执行多个任务,以达到节省时间的目的,目前的信息已经足够解决问题。再次感谢大家!

suchocolate 发表于 2022-11-9 10:47:59

TenSuns 发表于 2022-11-9 10:32
非常感谢大家的解答,我又查找了一些资料,其实我并不要求绝对同时执行,只是想尽可能的同时执行多个任务, ...

如果不要求绝对同时,可以按这种方式:subprocess.run('cmd1;cmd2;cmd3', shell=True)
;本身是shell里一次输入多个命令的分隔符

TenSuns 发表于 2022-11-9 12:51:50

suchocolate 发表于 2022-11-9 10:47
如果不要求绝对同时,可以按这种方式:
;本身是shell里一次输入多个命令的分隔符

非常感谢您的耐心解答,我仔细学习一下
页: [1]
查看完整版本: Python同时执行多条shell命令