首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中同时运行多个bash命令

在Python中同时运行多个bash命令
EN

Stack Overflow用户
提问于 2018-02-09 21:17:26
回答 1查看 355关注 0票数 2

我想创建一个python脚本,它可以启动bash脚本的多个实例。

我试过了

代码语言:javascript
复制
import subprocess

    commands = '''
    bashcmd1
    bashcmd2
    bashcmd3
    '''

    process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    out, err = process.communicate(commands)
    print out

但它在bashcmd2处停止,只有在我点击CTRL+C时才会继续。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 21:30:15

您只需运行一个bash,其中包含3个命令。

如果命令没有设置变量或相互依赖(否则您将无法并行化它们),也许您可以创建3个subprocess.Popen实例:

代码语言:javascript
复制
commands = '''
bashcmd1
bashcmd2
bashcmd3
'''

for process in [subprocess.Popen(['/bin/bash', '-c', line], stdout=subprocess.PIPE) 
                for line in commands.split("\n") if line]:  # filter out blank lines
    out, err = process.communicate() # or just rc = process.wait()
    # print out & err

该命令首先创建Popen对象的列表理解(list not generator,以便进程立即启动),然后执行communicate以等待完成(但同时其他进程正在运行)

优点是,您可以将此技术应用于任何包含命令的脚本,并且不需要使用外壳&功能(更便于移植,包括Windows,如果您使用["cmd","/c"前缀而不是bash)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48706774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档