[英]Run octave script from powershell and wait for it to finish
我正在嘗試從 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
但 prompt 不會等待 octave 完成執行。 它似乎以某種方式在另一個進程中異步運行它。
我嘗試使用等待選項從批處理中運行腳本
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))
使八度腳本在執行結束時寫入一個空的“完成”文件。 雖然不是最好的解決方案; 例如,我無法重定向執行 output。
編輯 2
因此,由於您的所有回復和評論,我設法找到了問題。 似乎當我從 windows 調用octave
時,它不是在調用可執行文件,而是在調用其他東西。 獲取正確的路徑並執行:
& "C:/Program Files/GNU Octave/Octave-6.4.0/mingw64/bin/octave-cli.exe" test.m
完美運行(您只需要在腳本末尾添加exit
)。 所以,這是一個路徑問題。
您可能會考慮將等待循環放入您的調用腳本中,例如...
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))
這將是 go 直接在調用 Octave 的行之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.