try函數逾時我有一個腳本可以呼叫許多其他腳本來報告設備和建置報告的過程。 有時,來自流程工具的資料包含 JMP 無法處理的錯誤。所以我將呼叫包裝在 Try() 函數中,如下所示:
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
有時,包含的腳本不會崩潰,但也不會完成。
雖然這可能可以透過編輯腳本及其處理資料的方式來解決,但它們不是我要編輯的腳本。
例如,如果需要超過 1 小時,是否有辦法讓 try 函數認為嘗試失敗?
有其他方法可以實現這一目標嗎? 有沒有辦法告訴 Try() 應該放棄?
謝謝
自動化和腳本編寫回覆:try函數逾時一方需要另一方工作嗎?如果您的主腳本實際上只是包含一堆單獨的腳本,為什麼不將每個腳本作為不同的任務運行呢?那就沒有關係了。每個人都會開啟自己的 JMP 實例並運行,然後關閉 JMP。您也可以單獨控制每個的超時。
回覆:try函數逾時我正在從任務計劃程序運行主腳本。我可以在那裡超時。 但是,如果其中一個腳本每小時、日復一日地出現相同的錯誤,則清單中該腳本下方的所有腳本都將永遠不會運行。
他們按照主腳本的組織方式,清單中後面的腳本運行頻率較低,因此可能需要幾週的時間才能注意到它們被完全跳過。我可以顛倒清單的順序 - 但是每次需要每 10 分鐘運行一次的腳本都會被跳過,直到我修復有問題的腳本中的問題(這更糟)。
此外,主腳本會在所有腳本執行後報告其自身的進度。如果任務被終止,這種情況就永遠不會發生。
我目前的解決方案是:註解掉有問題的腳本並等待責任方足夠關心來修復它。
有用。
回覆:try函數逾時如果您無法修改腳本,這聽起來確實可以使用 Windows 任務排程器來完成。 建立包含其他腳本的腳本,管理「包含」腳本中可以包含的所有錯誤,並在排程器任務中新增逾時。 超時後,它將終止執行。
一般來說,執行一批您無法控制的腳本很快就會變得混亂,因為您可能必須處理很多不同的事情(我必須做這樣的事情)。 以下是我遇到的一些問題(或改進的機會):
- 管理命名空間衝突
- 刪除/清除不需要的符號
- 避免腳本不使用預設名稱的情況(1)
- 避免使用包含的腳本中的清除符號/刪除全域變量
- 關閉不必要的數據表和報告以節省內存
- 捕捉會停止 JMP 的錯誤
- 在包含的腳本中使用退出/退出
- 記錄腳本執行情況以了解哪些內容正確執行
透過訓練/修改所包含的腳本,大多數問題都更容易處理。
回覆:try函數逾時不,try()沒有超時機制;它與 C++ 的 try-throw-catch 機制非常相似。 正如您所猜測的,您需要將邏輯放入每個包含的腳本中,這可以執行類似的操作
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
我知道您說過您無法打開這些腳本進行編輯,但如果您這樣做了,您可能希望它們對您的程式碼進行回調以指示進度。 然後,如果需要,您可以從回調中進行拋出。 無論哪種方式,您都需要在每個腳本中找到循環重複某些內容的點,並且超時取決於腳本是否表現良好(以繼續檢查時間)。
Windows 任務排程器也可能是解決方案的一部分;我沒有使用過它,但有很多線程詢問有關它的問題。 我可以從腳本中關閉 jmp 程式嗎?可能會建議一些東西。