2015-10-15 3 views
1

Я работаю с batchfile, где я регулярно пишу время для мониторинга производительности. Это хорошо работало, но в последнее время я назвал сценарий Python в рамках этого командного файла и измерения времени, кажется, больше не работают:
Мой пакетник выглядит следующим образом:python script messes up% time% in batchfile

echo [%TIME%] -- task 1 
<perform task 1> 
echo [%TIME%] -- task 2 
<perform task 2> 
echo [%TIME%] -- finished 

, что дает следующие результаты:

[14:51:32.97] -- task 1 
[14:51:34.32] -- task 2 
[14:51:39.07] -- finished 

Теперь я заменил скрипт Python (который занимает по крайней мере несколько минут), но мой% TIME% переменный, кажется, не будут обновляться больше:

echo [%TIME%] -- task 1 
<perform task 1> 
echo [%TIME%] -- task 2 
python task2.py 
echo [%TIME%] -- finished 

дает следующий результат:

[14:51:40.02] -- task 1 
[14:51:44.32] -- task 2 
[14:51:44.32] -- finished 

Кто-нибудь знает, что может вызвать эту проблему и как ее решить?
Для вашей информации я работаю над виртуальной системой Windows 7, а моя установка Python - версия 3.5.0.

+1

Это ваш фактический код, или вы уезжаете некоторые биты из? Потому что я могу почти гарантировать, что у вас есть '% TIME%' внутри набора круглых скобок, и поэтому он не обновляется. – SomethingDark

+0

Попробуйте 'call echo [%% time %%]' – wOxxOm

+0

Спасибо за быстрые комментарии. Тем временем я обнаружил, что проблема намного сложнее, чем в первый раз, и я делаю более глубокий анализ для сужения проблемы. Я отредактирую исходный вопрос и вернусь к нему, как только у меня появится дополнительная информация. Тем временем я могу сказать вам, что parenthese существуют по причинам читаемости, и они не влияют на поведение. Что касается '%% TIME %%', это, похоже, не работает. – Dominique

ответ

0

Я считаю, что эта проблема не связана с python. Например, сценарий

@echo off 

echo [%TIME%] --- 
echo [%TIME%] ping1 
ping 8.8.8.8 >nul 
echo [%TIME%] ping1 done 

if not exist 123 (
echo [%TIME%] ping2 
ping 8.8.8.8 >nul 
echo [%TIME%] ping2 done 
) 

echo [%TIME%] ping3 
ping 8.8.8.8 >nul 
echo [%TIME%] ping3 done 
echo [%TIME%] --- 

Выведет

[20:33:32,00] --- 
[20:33:32,00] ping1 
[20:33:35,04] ping1 done 
[20:33:35,04] ping2 
[20:33:35,04] ping2 done 
[20:33:38,12] ping3 
[20:33:41,16] ping3 done 
[20:33:41,16] --- 

Как вы можете видеть ping2 и ping2 done имеют одинаковую отметку времени. При использовании скобки () оболочка CMD будет расширять [читать] все переменные в начале кодового блока и использовать эти значения, даже если значение переменных изменяется в кодовом блоке.

Так что в данном случае решение

if not exist 123 (
call echo [%%TIME%%] ping2 
ping 8.8.8.8 >nul 
call echo [%%TIME%%] ping2 done 
) 

или

@echo off 
Setlocal EnableDelayedExpansion 
... 
if not exist 123 (
echo [!TIME!] ping2 
ping 8.8.8.8 >nul 
echo [!TIME!] ping2 done 
) 

и выход

[20:45:28,45] --- 
[20:45:28,45] ping1 
[20:45:31,49] ping1 done 
[20:45:31,49] ping2 
[20:45:34,53] ping2 done 
[20:45:34,54] ping3 
[20:45:37,59] ping3 done 
[20:45:37,59] --- 
+0

Спасибо большое, Dmity, я реализовал это в своем скрипте, и теперь все работает нормально. – Dominique