2016-03-22 2 views
0

У меня есть сценарий .bat, который вычисляет время выполнения процесса. Как следует:Как получить возвращаемое значение из сценария .bat?

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

Теперь я хочу вернуться «Время завершения» некоторые переменный сценария, из которого называется этот .bat скрипт, но я не получаю, как я должен вернуть значение из .bat сценария , Просьба предложить, как это получить.

+0

Что вы имеете в виду? Вы хотите, чтобы Finish Time хранилось в переменной окружения (например, Start Time), или вы хотите, чтобы сценарий выводил Finish Time на консоли для его захвата в вызывающем скрипте? – aschipfl

+0

Вам может быть интересно [эта тема] (http://stackoverflow.com/q/673523/5047996) относительно измерения времени выполнения ... – aschipfl

+0

@aschipfl Я хочу вернуть время окончания процесса, рассчитанного и возвращающего значение из .bat в скрипт python – Learner

ответ

1

Вы можете комбинировать subprocess и регулярное выражение для разбора выходного

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

Я сделал, как вы сказали, но я получаю ошибку при выполнении моего сценария python как «Файл» C: \ programs \ Python27 \ lib \ re.py ", строка 146, in search return _compile (pattern, flags) .search (string) TypeError: ожидаемая строка или буфер. Что случилось сейчас? – Learner

+0

, потому что output - это список (строки вашего пакетного вывода), а строка, которую вы ищете, второй. Я отредактировал свой код –

0

Со стороны сценария:

Легко разобрать называемый выход летучих мышей и получить необходимую информацию без выхода код. Вы можете использовать команду subprocess и метод связи для анализа вывода. Как сообщили в питона помощи:

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] 

Со стороны DOS:

Вы можете использовать команду "выход":

exit /b %errorlevel% 

И использовать ErrorLevel для твою пурпуру. Пожалуйста, для получения дополнительной информации, смотрите по адресу:

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

Другой вариант заключается в использовании переменной окружения с помощью команды «Setx» (который использует регистр и не летучий), или файл в виде временное хранилище.

Смежные вопросы