2014-08-29 116 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); 
}); 
相關問題