我有一个长期运行的Matlab脚本用于数据处理。我想在stdin上发送一个标志告诉它我有新的数据要处理。我还想在完成处理后从stdout读取一个标志。
换句话说,我有一个进程A,每分钟向Matlab发送一次标记。我希望Matlab等到它收到这个标志。
在matlab过程中写入stdout就像调用fprintf
一样简单。但是我如何从标准输入读取? fopen
上的文档没有提及输入管道,fread
也没有。如何从stdin中读取Matlab脚本?
答案 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')
。
请注意,答案在某些方面受到限制:
它只能在Linux环境中运行并且可以访问shell。
它没有使用Matlab内置函数,并且有点hackish。