终止后Python捕获子进程输出

Ali*_*i_G 3 python subprocess timeout output

我试图在引发TimeoutExpired异常时获取子进程输出(在Windows上).有任何想法吗?

try:
    proc = subprocess.run(cmd,timeout=3)
except subprocess.TimeoutExpired:
    print(???)
Run Code Online (Sandbox Code Playgroud)

Leo*_*ivì 5

您需要使用Popensubprocess.PIPE以便在超时到期时捕获进程输出.特别是Popen.communicate就是你所需要的.这是一个例子

proc = subprocess.Popen(["ping", "192.168.1.1"],
                        stdout=subprocess.PIPE)

try:
    output, error = proc.communicate(timeout=2)
except subprocess.TimeoutExpired:
    proc.kill()
    output, error = proc.communicate()
    print(output)
    print(error)
Run Code Online (Sandbox Code Playgroud)

这将打印过程输出直到超时.