首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP (Laravel Process)运行AMPL代码

从PHP (Laravel Process)运行AMPL代码
EN

Stack Overflow用户
提问于 2018-04-26 12:40:20
回答 1查看 309关注 0票数 0

我正在尝试使用Symfony进程从Laravel运行一个ampl .run (或任何ampl代码)文件。我的代码如下:

代码语言:javascript
复制
$commandArray = array('./ampl');

$process = new Process($commandArray);

        $process->setWorkingDirectory('/usr/local/bin/amplitude/amplide.linux64');
        $process->run();

        if (!$process->isSuccessful()) 
        {
            throw new ProcessFailedException($process);
        }

        dd($process->getOutput());

但我不能启动ampl。我犯了一个错误,比如:

“”命令"'./ampl'“失败。\n退出代码:2(错误使用shell内置程序) \n \n工作目录:/usr/local/bin/放幅.local 64 \n输出:\n ================\n \n错误输出:\n ================\n”“

我怀疑这是目录中的权限错误,但当我使用:

代码语言:javascript
复制
$commandArray = array('ls');

它工作并输出文件和文件夹的列表。我知道ampl基本上是一个终端程序,那么我如何访问和写命令到它呢?

如果有人能解释如何从进程访问终端程序,我认为这将是非常有帮助的。提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 20:27:21

我发现这里的问题是,只通过输入./ampl调用ampl控制台并不会触发任何响应。由于不能将其解释为实际命令,Laravel给出了一个错误。诀窍是将一个实际的命令传递给process对象,以便始终为您正在复制的任何..run/..mod/ .dat文件提供完整的路径。例如:

代码语言:javascript
复制
$commandArray = array('./ampl path/to/example.run;');

代码语言:javascript
复制
$command = './ampl path/to/example.run';

工作正常,并会给出响应。

我注意到的另一件重要的事情是,由于AMPL基本上是在终端中运行的另一个程序,所以我们不能使用数组单独传递不同的命令,如下所示:

代码语言:javascript
复制
$commandArray = array('./ampl model.mod;','./ampl data.dat;', './ampl solve;');

这不管用。这一点也不会:

代码语言:javascript
复制
$commandArray = array('./ampl, model.mod; data.dat; solve;');

理想情况下,最好将所有内容保存在.run文件中,然后执行它。

如果您需要从Laravel将参数传递给.dat文件,那么使用string级联将参数传递到命令中会引起问题,尽管我不知道原因。我建议首先使用Laravel中的Storage更新.dat文件,然后使用.run文件运行ampl问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50043249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档