我有一个fortran代码的可执行文件,我想从MATLAB运行。
我尝试使用以下两个选项但出错:
!/home/atrac/code case172.jcl
error:- ls: cannot access ./id: No such file or directory
ls: cannot access ./id: No such file or directory
!gnome-terminal --command "./home/myhome/code case12.jcl"
error: There was an error creating child process for this terminal
有没有办法可以编写shell脚本来执行程序并暂停Matlab直到执行外部程序然后将控制权传递给Matlab?
我正在尝试在Matlab中运行遗传算法,该算法称之为外部软件。 非常感谢任何想法或帮助。
谢谢, 佳日
答案 0 :(得分:1)
理想情况下,这应该作为评论,但我没有足够的声誉。
但是,创建子进程的错误与MATLAB无关。 shell出错了。你能从终端运行程序吗?
其次,您正在使用:
!/home/atrac/code case172.jcl
但你应该使用 !./ home / atrac / code case172.jcl
答案 1 :(得分:1)
好吧,看起来这里发生了两件不同的事情。两者都可能与Matlab的当前目录有关。
!/home/atrac/code case172.jcl
error:- ls: cannot access ./id: No such file or directory
ls: cannot access ./id: No such file or directory
此处,您似乎正在设法运行code
程序,但code
或JCL脚本正在当前工作目录中查找名为id
的文件。当你从Matlab中解脱出来时,它将成为Matlab的当前目录。从Matlab命令提示符运行pwd
以找出您的位置。您可以通过在Matlab中使用cd
移动到id
文件实际存在的目录(我在/ home / atrac中猜测它)来解决这个问题,然后使用相同的命令行运行code
。更好的解决方法是重写code
和/或JCL脚本在从任何路径运行时(可能使用绝对路径),因此你的cwd并不重要。
!gnome-terminal --command "./home/myhome/code case12.jcl"
error: There was an error creating child process for this terminal
这里,领先"。"可能搞砸了,因为它现在正在当前工作目录下寻找home/myhome
,而不是在根目录下。请尝试执行!gnome-terminal --command "/home/myhome/code case12.jcl"
(不使用"。")。
答案 2 :(得分:0)
当包含该文件的文件夹不在MATLAB可见的UNIX系统路径上时,您可以从MATLAB运行UNIX程序。要确定MATLAB可见的系统路径,请在命令窗口中键入以下内容:
GETENV( 'PATH')
您可以修改当前MATLAB会话或后续MATLAB会话持久存在的系统路径,如以下各节所述。
修改当前MATLAB会话的系统路径。执行以下操作之一:
Change the current folder in MATLAB to the folder that contains the program you want to run.
Issue these commands using the Command Window:
path1 = getenv('PATH')
path1 = [path1 ':/usr/local/bin']
setenv('PATH', path1)
!echo $PATH
如果重新启动MATLAB,该文件夹将不再位于MATLAB可见的系统路径上。