Running three commands in the same process with Python

后端 未结 2 2036
暖寄归人
暖寄归人 2020-12-29 17:10

I need to run those three commands for profiling/code coverage reporting on Win32.

vsperfcmd /start:coverage /output:run.coverage
helloclass
vsperfcmd /shutd         


        
相关标签:
2条回答
  • 2020-12-29 17:29

    Interesting question.

    One approach that works is to run a command shell and then pipe commands to it via stdin (example uses Python 3, for Python 2 you can skip the decode() call). Note that the command shell invocation is set up to suppress everything except explicit output written to stdout.

    >>> import subprocess
    >>> cmdline = ["cmd", "/q", "/k", "echo off"]
    >>> cmd = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    >>> batch = b"""\
    ... set TEST_VAR=Hello World
    ... set TEST_VAR
    ... echo %TEST_VAR%
    ... exit
    ... """
    >>> cmd.stdin.write(batch)
    59
    >>> cmd.stdin.flush() # Must include this to ensure data is passed to child process
    >>> result = cmd.stdout.read()
    >>> print(result.decode())
    TEST_VAR=Hello World
    Hello World
    

    Compare that to the result of separate invocations of subprocess.call:

    >>> subprocess.call(["set", "TEST_VAR=Hello World"], shell=True)
    0
    >>> subprocess.call(["set", "TEST_VAR"], shell=True)
    Environment variable TEST_VAR not defined
    1
    >>> subprocess.call(["echo", "%TEST_VAR%"], shell=True)
    %TEST_VAR%
    0
    

    The latter two invocations can't see the environment set up by the first one, as all 3 are distinct child processes.

    0 讨论(0)
  • 2020-12-29 17:33

    Calling an external command in Python

    How can I run an external command asynchronously from Python?

    http://docs.python.org/library/subprocess.html

    In particular checkout the 'subprocess' module and lookup the 'shell' parameter.

    0 讨论(0)
提交回复
热议问题