繁体   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