当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?

Posted

技术标签:

【中文标题】当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?【英文标题】:Why can't Dart's "Process.start" execute an Ubuntu command when the command works in Ubuntu terminal?当命令在 Ubuntu 终端中运行时,为什么 Dart 的“Process.start”不能执行 Ubuntu 命令? 【发布时间】:2014-08-29 11:54:53 【问题描述】:

我有命令我想用 Dart 调用。

命令是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);
);

【问题讨论】:

您是否像直接启动 sonar-runner 一样从同一个 shell/终端启动 Dart 脚本? 我找到了解决问题的方法,如下所述:***.com/questions/13938217/… 你做了什么,把路径传给Process.run() 我已经更新了我的原始帖子以包括:) @Claudiod'Angelis 我尝试使用 runInShell 和所有其他可选参数,但它们都不起作用。不过确实如此。 【参考方案1】:

试试这个方法run it in a normal Ubuntu terminal:

Process.run('sonar-runner', [], runInShell: true).then((result) 
  stdout.write(result.stdout);
  stderr.write(result.stderr);
);

【讨论】:

【参考方案2】:

问题似乎是找不到'sonar-runner',你试过完整路径吗?

【讨论】:

以上是关于当命令在 Ubuntu 终端中运行时,为啥 Dart 的“Process.start”不能执行 Ubuntu 命令?的主要内容,如果未能解决你的问题,请参考以下文章

当程序在 IntelliJ 中运行时,为啥我会收到 SSLHandshakeException 作为 JAR?

为啥在火花中运行时配置单元查询不起作用

为啥我的图像出现在 Android Studio 设计视图中,但在手机中运行时却没有?

为啥我的代码在线程 6:NSOperationQueue 中运行时会崩溃?

当 Docker 桌面在 WSL2 中运行时,bash 中的长工作目录

在Android Studio终端中运行时出现IO异常[重复]