Python连接子进程

Python连接子进程,python,subprocess,popen,shellcode,Python,Subprocess,Popen,Shellcode,我正在使用python执行shell命令。它工作得很好,但当我尝试执行多个命令时,它会在不同的进程中执行。 例如: 我使用以下代码执行这两个命令(命令被分配给变量bash\u cmd): 由于每次都创建不同的进程,因此我无法访问上一个命令中设置的名称。我可以编写一个批处理文件,但变量名的值也会动态变化。我希望这两个命令在同一进程中执行 有没有办法在python中批处理这些命令,或者加入子流程。请帮忙 您可以一次完成此操作,因此: NAME=XYZ葫芦android运行myApp.apk 每个子流

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

我使用以下代码执行这两个命令(命令被分配给变量bash\u cmd):

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


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

您可以一次完成此操作,因此:

  • NAME=XYZ葫芦android运行myApp.apk

  • 每个
    子流程。Popen
    创建一个新流程。如果要在同一个shell中执行多个命令,则可以一次传递所有命令:

    from subprocess import check_call
    
    check_call("\n".join(shell_commands), shell=True)
    
    您还可以启动shell进程,并通过其stdin逐个向其提供命令:

    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)
    
    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)