【问题标题】:Sequentially running python programs and matlab files using batch使用批处理顺序运行python程序和matlab文件
【发布时间】:2014-08-27 02:04:29
【问题描述】:

我是批量运行的

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

接下来,我要运行多个matlab m-file程序。

接下来,我运行批处理

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

然后我运行其他 matlab 程序,等等。

但是,如果我可以通过双击单个批处理文件来运行所有这些 python 和 matlab m 文件,那将非常方便。

如果批处理文件无法知道 m-file 的执行何时结束,我想出了一个可能的想象解决方案。

由于每个m文件都生成一个唯一的输出,“这行批处理文件在这个批处理文件所在的文件夹中创建matlab_output1.txt后2分钟后执行”

我选择“2分钟”是因为“matlab_output1.txt”被创建并不意味着m文件完成了“matlab_output1.txt”的创建,

也许对于 MatLab 来说,创建一个 txt 文件不会超过 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。

-等待

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做某事之前没有启动。

但问题仍然是它无法运行 mfile。

【问题讨论】:

  • 你如何call你的matlab程序?
  • @Shai Hm... 或者 start /wait 会起作用吗?有没有办法顺序运行python和m文件程序?
  • 您可以从批处理文件中调用 matlab call c:\path\to\matlab\matlab.exe -nodisplay -nojvm -r "cd my\matlab\folder; myMFile(); exit;",请参阅 matlab command line options 了解更多信息。
  • @Shai 所以这部分“cd my\matlab\folder; myMFile(); exit;”是本质。根据您提供给我的链接,这部分是“声明”。但是该链接没有解释如何编写该语句部分。你知道任何有用的链接吗?
  • @Shai 如果批处理文件与 m 文件位于同一文件夹中怎么办?那我可以省略“cd”部分吗?这样双引号部分现在变为“mymfile.m(); exit;” ?

标签: python matlab batch-file batch-processing


【解决方案1】:

需要在matlab命令行中使用-r参数:

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

假设您在当前工作目录中有mfile.m,并且此mfile.m 是不需要任何输入参数的脚本或函数。

你将这一行放入批处理文件并尝试运行批处理文件之前,尝试打开一个命令窗口chdir 到所需的工作目录并手动键入此命令以查看它是否有效或者是否有任何您可以轻松理解和修复的错误消息。

【讨论】:

  • 我运行了它,但是......它导致了同样的问题。 Python 甚至在 matlab 开始启动之前就执行了..
  • @user3123767 在 Windows 命令窗口中执行 start "01" /wait "C:\Program Files\MATLAB\R2012a\bin\matlab.exe" -r "mfile; exit" 会发生什么? Matlab 启动了吗?它有什么错误吗?
  • 即使我单独运行 MatLab 部分,它也不会产生任何输出。它只是启动 MatLab.exe,然后它没有生成任何东西。一个仅包含“A=1”的非常简单的 m 文件不会生成变量“A”。嗯.. 也许我的操作系统是 Windows 的事实导致了问题?
  • 当我在 windows 命令上运行它时,它显示“找不到 '01'”。所以我在没有“01”的情况下运行它。然后它至少会打开 matlab.exe,但它不会运行 mfile。即使是简单的程序“A=1”
  • 哦,我不需要 -noFigureWindows -nosplash。 1test.m 不起作用。但是 aatest.m 有效。我不确定,但当 mfiles 的名称以某个数字开头时,它可能会导致一些问题?无论如何,代码有效!谢谢!
【解决方案2】:

您还需要将 -wait 选项传递给 MATLAB,请参阅 the Windows docs

MATLAB 由一个单独的启动程序启动,该程序通常启动 MATLAB,然后立即退出。使用此选项告诉启动程序在 MATLAB 终止之前不要退出。当您需要在脚本中处理来自 MATLAB 的结果时,此选项很有用。使用此选项调用 MATLAB 会阻止脚本继续运行,直到生成结果

【讨论】:

  • 我将您的答案纳入我的帖子。添加 -wait 有助于防止 python 在 matlab 结束之前启动。但是代码还是不能运行mfile。
  • 感谢 Shai 的回答,我解决了这个问题。你的回答也很有帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多