简体   繁体   中英

Python - subprocess with creationflags (0x00000008) - How to get output after process ends? (Windows)

I wrote a Python script to run a terminal command that belongs to a 3rd party program.

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: []

This script basically runs the command successfully. However, I'd like to print the output but process.stdout.readlines() prints an empty list.

I need to run the subprocess with creationflags due to 3rd party program's terminal command.

I've also tried creationflags=subprocess.CREATE_NEW_CONSOLE . It works but process takes too long because of 3rd party program's terminal command.

Is there a way to print the output of subprocess by using creationflags=0x00000008 ?

By the way, I can use subprocess.run etc to run the command also but I'm wondering if I can fix this.

Thank you for your time!

Edit:

I'm sorry I forgot to say I can get output if i write "dir" etc. as a command. However, I can't get any output when I write a command such as: command = '"program.exe" test'

I'm not sure that this works for your specific case, but I use subprocess.check_output when I need to capture subprocess 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)

This just returns a string of stdout.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM