如何在Matlab中读取stdin

时间:2014-05-26 18:16:06

标签: matlab ipc matlab-deployment

我有一个长期运行的Matlab脚本用于数据处理。我想在stdin上发送一个标志告诉它我有新的数据要处理。我还想在完成处理后从stdout读取一个标志。

换句话说,我有一个进程A,每分钟向Matlab发送一次标记。我希望Matlab等到它收到这个标志。

在matlab过程中写入stdout就像调用fprintf一样简单。但是我如何从标准输入读取? fopen上的文档没有提及输入管道,fread也没有。如何从stdin中读取Matlab脚本?

2 个答案:

答案 0 :(得分:3)

事实证明,解决方案就像input一样简单。将以下内容写入myscript.m:

str = input('', 's'); 
fprintf(str); 
exit;

然后,在shell中运行以下命令:

echo Hello world | matlab -nosplash -nodisplay -nodesktop -r "myscript"

事实上,我们看到“Hello world”与Matlab的启动文本一起打印到控制台。

因此,总而言之,input从stdin读取,fprintf写入stdout。

答案 1 :(得分:1)

执行此操作的一种方法是使用named pipe。在shell中,运行mkfifo MY_PIPE以创建命名管道。这将创建一个名为MY_PIPE的文件对象,您可以读取和写入。然后,将程序发送数据的输出重定向到MY_PIPE,例如, ./program.sh > MY_PIPE。最后,要在Matlab中读取管道,可以使用fopen('MY_PIPE', 'r')

请注意,答案在某些方面受到限制:

  1. 它只能在Linux环境中运行并且可以访问shell。

  2. 它没有使用Matlab内置函数,并且有点hackish。