我正在嘗試創建一個批處理腳本,該腳本并行運行 2 個 python 腳本,如果其中一個(或兩個)腳本中有錯誤,則回傳錯誤代碼。如果兩個腳本都正確運行,則應運行下一個 python 腳本。
當我使用下面的腳本時,行程并行運行,但 !errorlevel! 始終為 0,即使兩個腳本都有錯誤。
如果我使用 start /wait 命令只運行一個 python 腳本,或者如果我使用 && 而不是 | 順序運行 2 個腳本,!errorlevel! 正確回傳。
這些腳本如何在并行運行的同時仍輸出正確的錯誤級別?
setlocal enableDelayedExpansion
start /wait python apirequest_0001.py | start /wait python apirequest_0002.py
echo !errorlevel!
if !errorlevel! neq 0 (goto end )
start /wait python join_data.py
uj5u.com熱心網友回復:
這里有幾點...
該start命令用于并行運行一個行程,但start /waitswitch 取消該功能并等待行程結束。這樣一來,使用start /wait就和完全不使用啟動命令是一樣的……
但是,在您的示例中,兩個命令都是通過管道連接的,因此它們可以有效地并行執行(因為是管道,而不是start命令)。
獲取兩個(或更多)并行行程的 ERRORLEVEL 值的最簡單方法是通過輔助檔案:
del error.aux 2> NUL
(python apirequest_0001.py & if errorlevel 1 echo X > error.aux) | (python apirequest_0002.py & if errorlevel 1 echo X > error.aux)
if exist error.aux goto end
python join_data.py
盡管執行此操作的“更清潔”方法是通過此方法
del error.aux 2> NUL
(
start "" "python apirequest_0001.py & if errorlevel 1 echo X > error.aux"
start "" "python apirequest_0002.py & if errorlevel 1 echo X > error.aux"
) | pause
if exist error.aux goto end
python join_data.py
注意:在此解決方案中,兩個命令可能同時結束并嘗試“同時”創建檔案。但是,在這種情況下這不是問題,因為無論如何都會創建檔案......
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428979.html
