2016-03-22 23 views
0

Bir işlemin yürütme süresini hesaplayan bir .bat komut dosyası var. aşağıdaki gibi:.bat komut dosyasından nasıl dönüş değeri alırım?

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

Şimdi, bu .bat komut denir hangi senaryonun bazı değişkene "Finish Time" dönmek istiyorum ama ben .bat komut değerini döneceğiz nasıl almıyorum . Lütfen size nasıl yardımcı olacağımı öner.

+0

Ne demek istiyorsun? Finish Time'ın bir ortam değişkeninde (Start Time gibi) kaydedilmesini ister misiniz? Veya komut dosyasının arama komut dosyasında yakalanması için konsoldaki Finish Time (Çıktı Zamanını) vermesini ister misiniz? – aschipfl

+0

[Bu thread] 'da (http://stackoverflow.com/q/673523/5047996), yürütme süresinin ölçülmesiyle ilgili olabilirsiniz. – aschipfl

+0

@aschipfl Hesaplanan ve iade edilen bir işlemin bitiş zamanını geri almak istiyorum .battan python betiğine bir değer – Learner

cevap

1

Sen komut taraftan çıktı üretmesi

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

dediğiniz gibi yaptım ama python betiğimi "Dosya" C: \ Programs \ Python27 \ lib \ re.py ", satır 146 olarak çalıştırırken hata alıyorum arama dönüşünde _compile (pattern, flags) .search (string) TypeError: beklenen dize veya arabellek şimdi nedir? – Learner

+0

çıktı bir liste (yığın çıktınızın satırları) ve aradığınız satırdır Seconde, kodumu düzenledim –

0

ayrıştırmak subprocess ve regex birleştirebilirsiniz:

İster bir çıkışı olmayan gereken bilgileri denilen yarasa çıkışını ayrıştırmak ve almak kolay kodu. Çıkışı ayrıştırmak için alt işlem komutunu ve iletişim yöntemini kullanabilirsiniz.

Sen "çıkış" komutunu kullanabilirsiniz:

exit /b %errorlevel% 

Ve için errorlevel kullanmak DOS taraftan

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] 

: piton yardımı bildirildiği gibi senin kusurun. , daha fazla bilgi için, bakınız:

Başka bir seçenek kullanmak ve etmektir

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

komut "setx" (Bir kayıt kullanır ve uçucu olmayan) ya da bir şekilde bir dosya ile ortam değişkeni geçici depolama