使用 Process.start 设置环境变量
Posted
技术标签:
【中文标题】使用 Process.start 设置环境变量【英文标题】:Set Environment variable using Process.start 【发布时间】:2012-12-18 17:20:06 【问题描述】:是否可以使用 Process.start() 设置环境变量?我尝试从 http://www.dartlang.org/articles/io/ 调整流程示例,但收到错误消息。
Process.start("export my_key='abc123'", []).then((process)
var stdoutStream = new StringInputStream(process.stdout);
stdoutStream.onLine = () => print(stdoutStream.readLine());
process.stderr.onData = process.stderr.read;
process.onExit = (exitCode)
print('exit code: $exitCode');
;
错误:
Unhandled exception:
FutureUnhandledException: exception while executing Future
ProcessException: No such file or directory
Command: export my_key='abc123'
original stack trace:
null
#0 _FutureImpl._complete (bootstrap:844:11)
#1 _FutureImpl._complete (bootstrap:848:5)
#2 _FutureImpl._setException (bootstrap:873:14)
#3 _CompleterImpl.completeException (bootstrap:948:30)
#4 _ProcessImpl._start.<anonymous closure> (dart:io-patch:198:37)
#5 _Timer._createTimerHandler._handleTimeout (dart:io:6918:28)
#6 _Timer._createTimerHandler._handleTimeout (dart:io:6926:7)
#7 _Timer._createTimerHandler.<anonymous closure> (dart:io:6934:23)
#8 _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)
【问题讨论】:
说“我收到错误”而不告诉我们错误是什么是绝对没有意义的。我们无法从这里看到您的屏幕或读懂您的想法。 错误添加到帖子。谢谢。 【参考方案1】:很遗憾,你不能。首先这是因为export
实际上是 bash(或其他几个 shell)的 shell 命令,而不是系统上的实际应用程序。 Dart 不在 shell 中执行进程。
一个选项是使用bash -c 'export my_key=123'
作为传递给 Process.start 的参数,但是这也非常有限,因为导出的变量仅在 bash 会话期间存在。也就是说,一旦你生成的进程终止,你的变量就不再存在了。
如果你想看到它的实际效果,请在命令提示符下尝试这样的操作:
bash -c 'export TEST="true";echo $TEST'
这将创建一个新的 bash 会话,导出变量,然后显示变量。得到提示后,尝试运行:
echo $TEST
本身。您应该会看到一个空行(如果您的系统上已经存在,则应该看到一个不同的值)。
也就是说,如果您想在运行其他进程之前设置环境变量,请使用ProcessOptions 类设置环境变量,然后将其传递给您的 Process.start :
import 'dart:io';
void main()
var po = new ProcessOptions();
var ev = 'TEST': 'True';
po.environment = ev;
Process.start('bash', ['-c','export'], po).then((process)
var stdoutStream = new StringInputStream(process.stdout);
stdoutStream.onLine = () => print(stdoutStream.readLine());
process.stderr.onData = process.stderr.read;
);
【讨论】:
感谢您的解释和替代解决方案。以上是关于使用 Process.start 设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章