如何通过MATLAB的“system()”或“!”继续与命令行交互命令?

时间:2015-08-21 04:14:17

标签: matlab command-line cygwin

我尝试在给出初始命令后继续与命令行窗口交互。命令是:
system('start cygwinbatch.bat')

包含:

::@echo off
C:\cygwin64\bin\bash -li /cygdrive/c/stp/stpscript.sh

这是运行“stpscript.sh”,它只包含一行,它在cygwin环境中运行stp.exe(它需要)。这一切都正常,但是stp有一个命令行界面,需要额外的输入(它允许我将地震数据下载到当前文件夹)。

我想知道的是,我可以通过MATLAB向已经打开的窗口添加其他命令吗? MATLAB中的附加命令(使用新行)似乎只是创建新的命令行实例。一旦打开STP,STP大约需要两秒钟才能运行并为新命令做好准备,所以如果MATLAB尝试给它一大堆输入(如在开放式STP中,那么立即尝试下载数据)它可能无法正常工作。 / p>

我还在想我可以使用附加命令向我的.sh脚本添加更多行,包含要下载的内容,但是我需要访问哪些数据的信息都在我的MATLAB脚本中计算。如果我不必用下一个要下载的数据集来重写我的.sh文件会更容易,我可以给MATLAB一个新的命令。那么,这可以吗?

1 个答案:

答案 0 :(得分:-1)

我不知道如何继续与外部程序交互,但是如果您事先知道stp.exe的输入,则可以使用I/O redirection

例如,您可以生成包含输入参数的文件:

A = 1;
B = 2;
f = fopen('C:\my\path\input.txt','w+')
fprintf(f,'A = %d\nB=%d\n',A,B);
fclose(f)

然后,您将标准输入重定向到stpscript.sh

中的所述文件
stp.exe < C:\my\path\input.txt

并阅读你的程序输出:

[~,output] = system('start cygwinbatch.bat')

您当然也可以从MATLAB生成shell脚本,而不是手动重写它们。