2016-03-22 15 views
0

Ich habe ein .bat-Skript, das die Ausführungszeit eines Prozesses berechnet. Wie folgt:Wie bekomme ich den Rückgabewert vom .bat-Skript?

set startTime=%time% 
YourApp.exe 
echo Start Time: %startTime% 
echo Finish Time: %time% 

Nun, ich will „Finish Time“ bis zu einem gewissen Variable des Skripts aus dem dieser .bat-Skript aufgerufen zurückkehren wird, aber ich bin nicht immer, wie soll ich den Wert aus dem .bat Skript zurückgeben . Bitte schlagen Sie mir vor, wie ich es erreichen soll.

+0

Was meinst du? Soll die Fertigstellungszeit in einer Umgebungsvariablen (wie Startzeit) gespeichert werden oder soll das Skript die Fertigstellungszeit auf der Konsole ausgeben, um sie im aufrufenden Skript zu erfassen? – aschipfl

+0

Sie könnten interessiert sein an [this thread] (http://stackoverflow.com/q/673523/5047996) über die Messung der Ausführungszeit ... – aschipfl

+0

@aschipfl ich möchte die Endzeit eines Prozesses berechnet und zurück der Wert von .bat in ein Python-Skript – Learner

Antwort

1

Sie können subprocess und regex kombinieren die Ausgabe

import subprocess 
import re 

output = subprocess.Popen(
    ("yourBatch.bat", "arguments1", "argument2"), 
    stdout=subprocess.PIPE).stdout 

finish_time_search = re.search('Finish Time: (.*)', output[1], re.IGNORECASE) 

if finish_time_search: 
    finish_time = finish_time_search.group(1) 

output.close() 
+0

ich habe getan, wie du gesagt hast, aber ich erhalte Fehler beim Ausführen meines Python-Skripts als "Datei" C: \ Programme \ Python27 \ lib \ re.py ", Zeile 146, in search return _compile (muster, flags) .search (string) TypeError: erwartete Zeichenfolge oder Puffer. Was ist jetzt falsch? – Learner

+0

weil Ausgabe ist eine Liste (Zeilen Ihrer Batch-Ausgabe), und die Zeile, die Sie suchen Ich habe meinen Code bearbeitet –

0

Vom Skript Seite zu analysieren:

Es ist leicht, die genannte Fledermaus Ausgabe zu analysieren und die Informationen, die Sie ohne Ausgang benötigen bekommen Code. Sie können den Befehl subprocess und die Methode communicate verwenden, um die Ausgabe zu analysieren. Wie in der Python-Hilfe berichtet:

https://docs.python.org/2/library/subprocess.html

output=`dmesg | grep hda` 
# becomes 
p1 = Popen(["dmesg"], stdout=PIPE) 
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) 
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. 
output = p2.communicate()[0] 

Von der Seite DOS:

Sie können die "exit" Befehl:

exit /b %errorlevel% 

Und Errorlevel verwenden für dein Purpose. bitte für weitere Informationen, schauen:

http://www.computerhope.com/exithlp.htm

Eine weitere Möglichkeit ist die Verwendung und Umgebungsvariable mit dem Befehl „setx“ (was ein Register verwendet, und es ist nicht flüchtig), oder eine Datei als temporärer Speicher

Verwandte Themen