运行 来自 powershell 的八度脚本并等待它完成
Run octave script from powershell and wait for it to finish
我正在尝试从 Powershell 运行 一个非常简单的八度 .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
但提示不会等待 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))
使八度脚本在执行结束时写入一个空的“完成”文件。虽然不是最好的解决方案;例如,我无法重定向执行输出。
编辑 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))
这将直接在调用 Octave 的行之后。
我正在尝试从 Powershell 运行 一个非常简单的八度 .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
但提示不会等待 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))
使八度脚本在执行结束时写入一个空的“完成”文件。虽然不是最好的解决方案;例如,我无法重定向执行输出。
编辑 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))
这将直接在调用 Octave 的行之后。