问题
我希望它在运行(编译)的 Matlab 可执行文件中“监听”标准输入流。
这就是我认为它是用c
或类似的语言完成的:
#include stdio.h
fgets(line, 256, stdin)
或者更详细地说,它可以这样使用:
if (!fgets(line, 256, stdin))
return;
if (line[0] == '\n')
continue;
sscanf(line, "%s", command);
回答
为了完整起见,我将完整地保留背景和笔记,但在 Amro 和 EitanT 的帮助下,我设法解决了问题。
背景
我已经找到了如何用其他语言做到这一点,这里有一些关于编译过程的说明。
但是,我还没有找到如何在 Matlab 中“收听”输入的方法。我最接近的是在 Octave 中对类 C IO 的描述,但是当我在 MATLAB 中寻找解决方案时,我无法在这方面取得进展。
请注意,更改或包装通过流发送数据的程序是不可能的,我更喜欢纯 MATLAB 解决方案,而不是包装我的整个程序。如果我用另一种语言从 MATLAB 中调用一个简单的函数,那就没问题了。
我尝试了什么?
我从命令窗口尝试fgets(0)
了一些函数,例如(fid = 0
似乎是对应于的 id stdin
(如@EitanT 所述并在尝试时看到fopen(0)
))但它只是返回:
Operation is not implemented for requested file identifier.
我也考虑过使用 MATLAB 中的选项来调用系统命令或执行java
/perl
命令,但到目前为止没有运气。我也不确定这些在编译后是否仍然有效。
此外input('prompt','s')
,当我通过 打开程序时,我尝试使用此作品cmd
,但直到我按 Enter 键才执行任何操作。(我听的程序当然永远不会这样做,在最好的情况下,我可以\n
在每一行的末尾得到)。
我也尝试过 waitinput
File Exchange,但我认为这是一个死胡同,因为它没有捕捉到任何东西,而且似乎表现很差。
笔记
- 我正在使用 Windows 7 和 MATLAB 2012b。
- 我
popen
在 File Exchange 上找到了,但这似乎不适用于 Windows。 - 当我简单地键入这样
'show me'
的内容时,会正确地发送到标准输出流。