python subprocess popen同步命令

标签 python python-2.7 subprocess

我正在尝试使用 popen 启动一个一个接一个调用两个命令(带有多个参数)的子进程。第二个命令依赖于运行的第一个命令,所以我希望使用单个子进程来运行这两个命令,而不是生成两个进程并等待第一个。

但是我遇到了问题,因为我不确定如何提供两个命令输入或将命令作为一个对象分开。

另外,如果可能的话,我试图避免将 shell 设置为 true。

这基本上是我想要做的:

for test in resources:
    command = [
        'pgh',
        'resource',
        'create',
        '--name', test['name'],
        '--description', test['description'],
    ]
    command2 = [
        'pgh',
        'assignment',
        'create',
        '--name', test['name'],
        '--user', test['user'],
    ]


    p = Popen(command, stdout=PIPE, stderr=PIPE)
    stdout, stderr = p.communicate()
    print(stdout)
    print(stderr)

最佳答案

在启动另一个命令之前,您必须启动命令并等待完成。您应该对每个命令重复执行此操作。

这可以作为

ps = [ Popen(c, stdout=PIPE, stderr=PIPE).communicate() 
       for c in command]

备注 无论天气如何,这都会启动下一个命令,第一个命令成功或失败。如果您只想在上一个命令成功时启动下一个命令,请使用
def check_execute(commands):
    return_code = 0
    for c in commands:
        p = Popen(c, stdout=PIPE, stderr=PIPE)
        result = p.communicate()
        yield result
        return_code = p.returncode
        if return_code != 0:
            break

关于python subprocess popen同步命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44648872/

相关文章:

python - multiprocessing.connection.Client 连接重试时间

python - 打印时 Spyder 控制台出错

python - 如何使用python运行带有参数的exe文件

python - 将数据框中的列转换为数值列表列表

python - 如何在不使用 .get_attribute() 的情况下使用 Selenium python 获取属性

python - 如何在默认python版本为python 2.6的linux上安装和使用另一个版本的python(python 2.7)

python - 确保子进程在退出 Python 程序时死亡

适用于 Windows 的 python os.mkfifo()

python - 为什么 Flask 应用程序运行但浏览器未加载页面?

python lambda 使用多个参数引发变量未定义错误