在 MATLAB 中准备命令
Prepare command in MATLAB
在 MATLAB 中有没有办法以编程方式准备命令(即直接将命令写入命令提示符)以便用户可以通过按 enter 来执行它?
我想实现自己的 "Did you mean:" 功能,该功能已内置于 MATLAB 中。
简短的回答是否。这不能如你所愿地完成。您要做的是将文本写入 MATLAB 的 stdin
并让它保持原样。本质上是管道的修改形式。
MATLAB 中可用的最接近的选项是 Evaluate Selection,当您 select 文本时,您可以使 MATLAB 在命令提示符下执行它。 MATLAB 将此文本准确地放在您想要的位置,但它也会立即执行它。似乎没有办法停止此操作或以编程方式模拟其功能。
在 MATLAB 中写入 stdin
是不允许的,正如您在
中看到的那样
>> fprintf(0, 'help conv')
Error using fprintf
Operation is not implemented for requested file identifier.
其中 0
表示 stdin
,1
表示 stdout
,2
表示 stderr
。另一个天真的尝试是使用 fopen()
>> fid = fopen(0, 'w');
Error using fopen
Invalid filename.
但这也失败了。但是,我们可以从第一次尝试中看出您想要什么
is not implemented
获得您想要的东西的唯一选择是可能有一些 MATLAB hackery 的能力,但我不知道它或任何人甚至尝试过它。
编辑: 提供了我正在谈论的 MATLAB hackery 解决方案。
最接近你想要的是使用hyperlinks to run MATLAB commands like
>> disp('Did you mean: <a href="matlab:conv(a,b)">conv()</a>')
Did you mean: conv()
ans =
12
其中 conv()
是一个超链接,点击它会执行 conv(a,b)
其中 a = 3;
和 b = 4;
在这个例子中。
可以使用来自 Matlab 的 Java 来 以编程方式生成关键事件 ,按照 。
假设您想要 "prepare" 的命令是 dir
。然后
commandwindow; %// make Matlab command window have focus
robot = java.awt.Robot; %/ Java Robot class
robot.keyPress (java.awt.event.KeyEvent.VK_D); %// key press event
robot.keyRelease (java.awt.event.KeyEvent.VK_D); %// key release event
robot.keyPress (java.awt.event.KeyEvent.VK_I);
robot.keyRelease (java.awt.event.KeyEvent.VK_I);
robot.keyPress (java.awt.event.KeyEvent.VK_R);
robot.keyRelease (java.awt.event.KeyEvent.VK_R);
将在命令 window 上输入 dir
,就好像用户自己写的一样。然后按 Enter 将 运行 命令。
在 MATLAB 中有没有办法以编程方式准备命令(即直接将命令写入命令提示符)以便用户可以通过按 enter 来执行它?
我想实现自己的 "Did you mean:" 功能,该功能已内置于 MATLAB 中。
简短的回答是否。这不能如你所愿地完成。您要做的是将文本写入 MATLAB 的 stdin
并让它保持原样。本质上是管道的修改形式。
MATLAB 中可用的最接近的选项是 Evaluate Selection,当您 select 文本时,您可以使 MATLAB 在命令提示符下执行它。 MATLAB 将此文本准确地放在您想要的位置,但它也会立即执行它。似乎没有办法停止此操作或以编程方式模拟其功能。
在 MATLAB 中写入 stdin
是不允许的,正如您在
>> fprintf(0, 'help conv')
Error using fprintf
Operation is not implemented for requested file identifier.
其中 0
表示 stdin
,1
表示 stdout
,2
表示 stderr
。另一个天真的尝试是使用 fopen()
>> fid = fopen(0, 'w');
Error using fopen
Invalid filename.
但这也失败了。但是,我们可以从第一次尝试中看出您想要什么
is not implemented
获得您想要的东西的唯一选择是可能有一些 MATLAB hackery 的能力,但我不知道它或任何人甚至尝试过它。
编辑:
最接近你想要的是使用hyperlinks to run MATLAB commands like
>> disp('Did you mean: <a href="matlab:conv(a,b)">conv()</a>')
Did you mean: conv()
ans =
12
其中 conv()
是一个超链接,点击它会执行 conv(a,b)
其中 a = 3;
和 b = 4;
在这个例子中。
可以使用来自 Matlab 的 Java 来 以编程方式生成关键事件 ,按照
假设您想要 "prepare" 的命令是 dir
。然后
commandwindow; %// make Matlab command window have focus
robot = java.awt.Robot; %/ Java Robot class
robot.keyPress (java.awt.event.KeyEvent.VK_D); %// key press event
robot.keyRelease (java.awt.event.KeyEvent.VK_D); %// key release event
robot.keyPress (java.awt.event.KeyEvent.VK_I);
robot.keyRelease (java.awt.event.KeyEvent.VK_I);
robot.keyPress (java.awt.event.KeyEvent.VK_R);
robot.keyRelease (java.awt.event.KeyEvent.VK_R);
将在命令 window 上输入 dir
,就好像用户自己写的一样。然后按 Enter 将 运行 命令。