【问题标题】:Python join subprocessesPython 加入子进程
【发布时间】:2014-08-25 11:31:19
【问题描述】:

我正在使用 python 执行 shell 命令。它工作正常,但是当我尝试执行多个命令时,它会在不同的进程中执行。 例如:

1. set NAME=XYZ
2. calabash-android run myApp.apk

我正在执行这两个命令,使用以下代码(命令分配给变量 bash_cmd):

f_handle = open('test_output.txt','w+')
process = subprocess.Popen(bash_cmd, shell=True, stdout=sys.stdout)
process.wait()            
f_handle.close()

由于每次都会创建不同的进程,我无法访问上一个命令中设置的 NAME。我可以编写一个批处理文件,但变量 NAME 的值再次动态变化。我希望这两个命令在同一个进程中执行。

有没有办法在 python 中批处理这些命令,或者加入子进程。请帮忙!!

【问题讨论】:

    标签: python subprocess popen shellcode


    【解决方案1】:

    每个subprocess.Popen 创建一个新进程。如果你想在同一个 shell 中执行多个命令,那么你可以一次传递它们:

    from subprocess import check_call
    
    check_call("\n".join(shell_commands), shell=True)
    

    您也可以启动一个 shell 进程并通过它的标准输入一一输入命令:

    from subprocess import Popen, PIPE
    
    shell = Popen("/bin/sh", stdin=PIPE, bufsize=1)
    for shell_command in iter(commands_queue.get, None):
        print >>shell.stdin, shell_command # write command
    shell.stdin.close()
    if shell.wait() != 0:
        raise RuntimeError(shell.returncode)
    

    在您的特定情况下,您可以将修改后的环境直接传递给子进程:

    import os
    from subprocess import check_call
    
    env = os.environ.copy()
    env['NAME'] = 'XYZ'
    check_call(["calabash-android", "run", "myApp.apk"], env=env)
    

    【讨论】:

      【解决方案2】:

      您可以一次性完成:

      1. NAME=XYZ 葫芦-android 运行 myApp.apk

      【讨论】:

        猜你喜欢
        • 2015-05-07
        • 2016-10-08
        • 2016-04-16
        • 2023-01-17
        • 2014-11-10
        • 2012-05-13
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        相关资源
        最近更新 更多