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
subprocess, Ergebnis aus cmd speichern
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.
`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"])
Also mit :
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:
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
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)
Meine Eigentliche Zeile ist dann:
Code: Alles auswählen
output = subprocess.check_output([str_cmdPfad, "xod -x"], stdin=subprocess.PIPE, stderr=subprocess.PIPE)
xod -x = Der Befehl
Was mir den Fehler wirft:
CalledProcessError: Command '['D:/Programme/mehrPfad/prog.exe', 'xod -x']' returned non-zero exit status 255
- __blackjack__
- User
- Beiträge: 13079
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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
Oder doch eher so: D:/Programme/mehrPfad/prog.exe xod -x
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman