簡體   English   中英

從 powershell 運行八度腳本並等待它完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM