Seite 1 von 1

subprocess, Ergebnis aus cmd speichern

Verfasst: Donnerstag 4. Oktober 2018, 23:12
von reneh
Guten Abend,

zur Testautomatisierung verwende ich Squish in Kombination mit Python. Für einen Test möchte ich eine Anweisung in der Kommandozeile ausführen und möchte mir das Ergebnis (ist eine Anzahl von Objekten in der Datenbank) speichern. Es ist dabei egal, ob das Ergebnis direkt in einer Variablen gespeichert wird oder erst z.B. in einer txt zwischengespeichert wird.
Wenn ich das ganze manuell durchführe ist alles kein Problem. Wenn ich es über Squish mit Python (oder nur über die Python idle ohne Squish) mache, wird der Befehl ausgeführt und erscheint in der cmd auch korrekt, die txt wird auch erstellt, aber er schreibt nix in die txt. Er sagt, dann dass er auf die neu erstellte txt nicht zugreifen kann, da diese in Benutzung ist.

Mein erster Ansatz war :
os.system("programmpfad/programm.exe befehl > text.txt") Hierbei war es egal, ob ich den Pfad der txt statisch oder dynamisch angebe. Der Fehler kam trotzdem.

Mein zweiter Ansatz war über:
subprocess.check_output() Hier weiß ich aber leider garnicht was ich da wie Parametrieren muss.

Ist es egal welchen von beiden man verwendet und wie wäre ein Befehl, dass er tatsächlich was in die txt schreibt???

Kann mir jemand helfen?
DAnke und viele Grüße
rh

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Donnerstag 4. Oktober 2018, 23:15
von __deets__
Du musst stdout und/oder stdin mit subprocss.PIPE als Wert übergeben. Dann werden die zurück geliefert.

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Freitag 5. Oktober 2018, 07:18
von Sirius3
Für den konkreten Fehler brauchen wir auch den passenden Code. Ich vermute, da Du ja ins aktuelle Arbeitsverzeichnis schreiben willst, dass das anders ist, als Du denkst.

`check_output` speichert die Ausgabe in einer Variable, was ja besser ist, wenn man die Daten weiterverarbeiten will.

Code: Alles auswählen

output = subprocess.check_output(["programmpfad/programm.exe", "befehl"])

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Freitag 5. Oktober 2018, 16:07
von reneh
Also mit :

Code: Alles auswählen

def findeDatei(name, path):
    for root, dirs, files in os.walk(path):
        if name in files:
            return os.path.join(root, name)
            
suche ich mir erstmal den Pfad des Programms, da das ganze dynamisch sein soll. Erzeugt wird der Pfad dann mit doppeltem Backslash. Also sowas: D:\\Programme\\prog.exe Ist das soweit ein Problem?

Meine Eigentliche Zeile ist dann:

Code: Alles auswählen

output = subprocess.check_output([str_cmdPfad, "xod -x"], stdin=subprocess.PIPE, stderr=subprocess.PIPE)
str_cmdPfad = Pfad inklusive Programm.exe
xod -x = Der Befehl

Was mir den Fehler wirft:
CalledProcessError: Command '['D:/Programme/mehrPfad/prog.exe', 'xod -x']' returned non-zero exit status 255

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Freitag 5. Oktober 2018, 16:20
von reneh
Den Fehler am Ende wirft er in dem Fall mit festem Pfad, also ohne die Verwendung der Funktion "findeDatei"

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Freitag 5. Oktober 2018, 16:43
von __blackjack__
@reneh: Ist 'xod -x' tatsächlich *ein* Argument? Also rufst Du das manuell auf der Kommandozeile so auf: D:/Programme/mehrPfad/prog.exe "xod -x"

Oder doch eher so: D:/Programme/mehrPfad/prog.exe xod -x

Re: subprocess, Ergebnis aus cmd speichern

Verfasst: Freitag 5. Oktober 2018, 16:55
von snafu
Mit anderen Worten: Jedes Argument muss ein eigenes Element in der Liste sein. Falls es xod -x auf der Kommandozeile ist, dann musst du [programm, 'xod', '-x'] eingeben.