鱼C论坛

 找回密码
 立即注册
查看: 2966|回复: 8

[已解决]Python同时执行多条shell命令

[复制链接]
发表于 2022-11-9 00:03:00 | 显示全部楼层 |阅读模式
5鱼币
求助万能的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命令,并保证两条命令执行完毕,再执行后续的代码,应该怎么办?
最佳答案
2022-11-9 00:03:01
本帖最后由 suchocolate 于 2022-11-9 00:22 编辑
  1. c1 = subprocess.Popen('cmd1', shell=True)
  2. c2 = subprocess.Popen('cmd2', shell=True)
  3. c1.wait()
  4. c2.wait()
复制代码

另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。

最佳答案

查看完整内容

另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-9 00:03:01 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2022-11-9 00:22 编辑
  1. c1 = subprocess.Popen('cmd1', shell=True)
  2. c2 = subprocess.Popen('cmd2', shell=True)
  3. c1.wait()
  4. c2.wait()
复制代码

另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-9 00:29:33 | 显示全部楼层
suchocolate 发表于 2022-11-9 00:20
另外,上面理论上并不是同时执行,想真同时执行,你需要multiprocessing或threading库。

谢谢您的解答,加了wait()命令已经完全可以解决我的问题。抱着学习的态度还想知道一下,multiprocessing库如何实现同时执行多条shell命令,并等待命令执行完毕再执行后续代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-9 00:35:52 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2022-11-9 00:40 编辑

        同时执行多条命令,命令之间用 && 连接即可,只有前面的命令正常结束才会执行后面的命令,否则,后面的命令会夭折。
  1. os . system('cmd1 && cmd2')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这个需要看看多线程和多进程相关的书。
菜鸟上只有简单的多线程:https://www.runoob.com/python3/python3-multithreading.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


我觉得; && || 都不算真正的同时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-9 10:32:26 | 显示全部楼层
非常感谢大家的解答,我又查找了一些资料,其实我并不要求绝对同时执行,只是想尽可能的同时执行多个任务,以达到节省时间的目的,目前的信息已经足够解决问题。再次感谢大家!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

如果不要求绝对同时,可以按这种方式:
  1. subprocess.run('cmd1;cmd2;cmd3', shell=True)
复制代码

;本身是shell里一次输入多个命令的分隔符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

非常感谢您的耐心解答,我仔细学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 13:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表