2014-08-29 118 views
3

我有命令,我想用Dart打电话。为什么当命令在Ubuntu终端中运行时,Dart的“Process.start”不能执行Ubuntu命令?

该命令是sonar-runner,如果我在一个普通的Ubuntu终端中运行它,它会很好地工作。这是因为我在.profile文件中编辑了PATH,因此它变成了全局命令。

但是,如果我写了一个简单Process.start代码应该触发同样的事情:

Process.run('sonar-runner', []).then((result) { 
    stdout.write(result.stdout); 
    stderr.write(result.stderr); 
}); 

我得到的回应:

Uncaught Error: ProcessException: No such file or directory 
    Command: sonar-runner 
Unhandled exception: 
ProcessException: No such file or directory 
    Command: sonar-runner 

我猜这是一个Ubuntu配置事情,因为我没有问题以相同的方式通过Dart运行ping localhost

什么可能是错误的,以便第三方应用程序在将它作为新进程运行时找不到全局命令?

更新 - 气相色谱法确认

我找到了解决我的问题,如下所述:

Set Environment variable using Process.start

对于我的具体情况,该代码工作:

Process.run("bash", ["-c", "sonar-runner"]).then((result) { 
    stdout.write(result.stdout); 
    stderr.write(result.stderr); 
}); 
+0

你开始从相同的外壳/终端达特脚本像你直接启动'声纳runner'? – 2014-08-29 12:35:44

+0

我找到了解决我的问题,如下所述: http://stackoverflow.com/questions/13938217/set-environment-variable-using-process-start – corgrath 2014-08-29 15:03:29

+0

你做了什么,传递路径'Process.run()'? – 2014-08-29 15:06:29

回答

0

问题似乎是临时不能找到'sonar-runner',你有没有尝试完整的路径?

3

试试这个办法run it in a normal Ubuntu terminal

Process.run('sonar-runner', [], runInShell: true).then((result) { 
    stdout.write(result.stdout); 
    stderr.write(result.stderr); 
}); 
相关问题