Python-underproces på Windows: stderr-output i stdout (men ikke hvis jeg kører kommandoen i cmd.exe)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil have mit python script til at behandle resultatet af værktøjet sigcheck.exe.
Følgende kommando, når du kører i cmd.exe udskriver et banner (dette synes at være stderr-output) og skriver stdout-output til en csv-fil:


sigcheck64 -c c:	mpunsigned.exe > csv\_output.csv


Dette viser stdout output og skriver stderr (overskriften) i en fil:
    sigcheck64 -c c: \ tmp \ unsigned.exe 2> csv\_output.csv


Men hvis jeg forsøger at gøre dette i python, er både stdout- og stderr-udgangene i stdout.


import subprocess
p = subprocess.Popen(["sigcheck64.exe","-c", c:	mpunsigned.exe"], 
                      shell=True,
                      stdout=subprocess.PIPE,
                      stderr=subprocess.PIPE)

o,e = p.communicate()
print("stdout: \%s" \% o)
print("stderr: \%s" \% e)


Jeg kunne ikke finde en måde at separat få stdout output. Jeg forsøgte anden subprocessfunktion, og jeg forsøgte at omdirigere stderr til devnull.


Jeg kunne analysere det fusionerede output, men det ville være grimt, og i øvrigt vil jeg forstå, hvad der foregår her.

Bedste reference