使用批处理顺序运行Python程序和Matlab文件

-1 投票
2 回答
1023 浏览
提问于 2025-04-18 12:16

我通过批处理来运行程序。

call C:\python27\python.exe program1.py input1 output1
call C:\python27\python.exe program2.py input2 output2

接下来,我需要运行多个 Matlab 的 m 文件程序。

然后,我再运行批处理。

call C:\python27\python.exe program3.py input3 output4
call C:\python27\python.exe program4.py input3 output4

接着,我会运行其他的 Matlab 程序,依此类推。

不过,如果我能通过双击一个批处理文件来同时运行这些 Python 和 Matlab 的 m 文件,那就方便多了。

如果批处理文件无法知道 m 文件什么时候执行完,我想到了一个可能的解决办法。

因为每个 m 文件都会生成一个独特的输出,所以我设想“当 matlab_output1.txt 在这个批处理文件所在的文件夹中创建后,经过 2 分钟这行批处理文件会被执行”。

我选择“2 分钟”是因为仅仅“matlab_output1.txt”被创建并不意味着 m 文件已经完成生成这个文件,

而且创建一个 txt 文件对于 Matlab 来说通常不会超过 2 分钟。

我也试过这个方法。

start "01" /wait "C:\Program Files\MATLAB\R2012a\bin\matlab.exe" mfile.m
start "02" /wait "C:\python27\python.exe" python.py input.xlsx

还有

start "01" /wait "C:\Program Files\MATLAB\R2012a\bin\matlab.exe" -r "m-file; exit"
start "02" /wait "C:\python27\python.exe" python.py input.xlsx

但是这两种方法都失败了。它在 Matlab 程序启动之前就开始运行 Python。

-wait

moarningsun 建议加上 -wait。

所以我试了试

start "01" /wait "C:\Program Files\MATLAB\R2012a\bin\matlab.exe" -wait -r "aatest; exit;"
start "02" /wait "C:\python27\python.exe" simple_tool_naming.py match_naming1.xlsx

是的,最后 Python 程序不会在 Matlab 做事情之前启动了。

但问题还是出在它无法运行 m 文件。

2 个回答

1

你需要在启动MATLAB的时候加上 -wait 这个选项,具体可以查看 Windows文档

MATLAB是通过一个单独的启动程序来运行的,这个程序通常会启动MATLAB,然后马上退出。如果你使用这个选项,就告诉这个启动程序在MATLAB结束之前不要退出。这在你需要在脚本中处理MATLAB的结果时特别有用。加上这个选项后,脚本会暂停,直到MATLAB生成结果为止。

1

你需要在 MATLAB 的命令行中使用 -r 参数:

start "01" /wait "C:\Program Files\MATLAB\R2012a\bin\matlab.exe" -r "mfile; exit"

假设你在当前工作目录下有一个叫 mfile.m 的文件,并且这个 mfile.m 是一个脚本或者一个不需要任何输入参数的函数。

你把这行代码放进批处理文件并尝试运行之前,先打开一个命令窗口,使用 chdir 命令切换到你想要的工作目录,然后手动输入这个命令,看看它是否能正常工作,或者有没有什么错误信息是你能理解并且可以修复的。

撰写回答