Python -带创建标志的子进程(0x 00000008)-如何在进程结束后获得输出?(Windows)

yvfmudvl  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(147)

我编写了一个Python脚本来运行属于第三方程序的终端命令。

import subprocess

DETACHED_PROCESS = 0x00000008

command = 'my cmd command'

process = subprocess.Popen(
    args=command,
    shell=True, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.STDOUT,
    encoding="utf-8",
    creationflags=DETACHED_PROCESS  
)

code = process.wait()

print(process.stdout.readlines())
# Output: []

这个脚本基本上成功地运行了命令,但是我想打印输出,但是process.stdout.readlines()打印了一个空列表。
由于第三方程序的终端命令,我需要使用creationflags运行子进程。
我也试过creationflags=subprocess.CREATE_NEW_CONSOLE。它工作,但过程太长,因为第三方程序的终端命令。
有没有办法使用creationflags=0x00000008打印子进程的输出?
顺便说一下,我可以使用subprocess.run等来运行命令,但我想知道我是否可以修复这个问题。
感谢您抽出宝贵时间!
编辑:
很抱歉我忘了说如果我把"dir"等写为命令,我可以得到输出。但是,当我写这样的命令时,我不能得到任何输出:command = '"program.exe" test'

luaexgnf

luaexgnf1#

我不确定这是否适用于您的特定情况,但是当我需要捕获子流程输出时,我使用subprocess.check_output

import subprocess

DETACHED_PROCESS = 0x00000008

command = 'command'

process = subprocess.check_output(
    args=command,
    shell=True,  
    stderr=subprocess.STDOUT,
    encoding="utf-8",
    creationflags=DETACHED_PROCESS  
)

print(process)

它只返回一个stdout字符串。

相关问题