我正在嘗試從 Powershell 運行一個非常簡單的 octave .m 檔案,但我無法讓 powershell 等待它完成。事實上,它會啟動腳本執行,然后立即開始執行下一行。
正如我所說的腳本很簡單,只是一個測驗
a=100
% Saving just to be sure that the script excuted
save test.mat a
% Pausing to be sure that the execution is not too fast
pause(10)
disp("no way")
在powershell中我只是運行
octave --persist test.m
但提示不會等待八度音程完成執行。它似乎以某種方式在另一個行程中異步運行它。
我嘗試使用等待選項從批處理中運行腳本
START /W octave --persist test.m
但結果還是一樣。
提前致謝
編輯 1
感謝@Trey Nuckolls,我正在使用這個補丁:
$Donefilename = 'done'
if (Test-Path $Donefilename) {
Remove-Item $Donefilename
Write-Host "Last execution $Donefilename has been deleted"
}
else {
Write-Host "$Donefilename doesn't exist"
}
octave --persist test.m
do{
$i
Start-Sleep -Seconds 2
$OctaveComplete = Test-Path -Path $Donefilename
}
until ($OctaveComplete -or ($i -eq 30))
使八度腳本在執行結束時寫入一個空的“完成”檔案。雖然不是最好的解決方案;例如,我無法重定向執行輸出。
編輯 2
因此,由于您的所有回復和評論,我設法找到了問題。似乎當我octave從 Windows 呼叫時,它不是呼叫可執行檔案而是呼叫其他東西。獲取正確的路徑并執行:
& "C:/Program Files/GNU Octave/Octave-6.4.0/mingw64/bin/octave-cli.exe" test.m
完美運行(您只需exit在腳本末尾添加)。所以,這是一個路徑問題。
uj5u.com熱心網友回復:
您可能會考慮在您的呼叫腳本中放置一個等待回圈,例如...
do{
$i
Start-Sleep -Seconds 10 #Assuming that 30 seconds is way too long
$OctiveComplete = <**Boolean returning function that becomes 'True' when run is complete**>
}
until ($OctiveComplete -or ($i -eq 4))
這將直接在呼叫 Octave 的行之后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/467587.html
