gpt4 book ai didi

dart - 使用 Process.start 设置环境变量

转载 作者:行者123 更新时间:2023-12-02 15:51:23 26 4
gpt4 key购买 nike

是否可以使用 Process.start() 设置环境变量?我尝试改编 http://www.dartlang.org/articles/io/ 中的 Process 示例但我收到错误。

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)

最佳答案

不幸的是,你不能。首先这是因为export实际上是 bash(或其他几个 shell)的 shell 命令,而不是系统上的实际应用程序。 Dart 不在 shell 内执行进程。

一个选项是使用 bash -c 'export my_key=123'作为传递给 Process.start 的参数,但这也有非常有限的用途,因为导出的变量仅在 bash session 期间存在。也就是说,一旦您生成的进程终止,您的变量就不再存在。

如果您想查看实际效果,请在命令提示符下尝试如下操作:

bash -c 'export TEST="true";echo $TEST'

这将创建一个新的 bash session ,导出变量,然后显示该变量。一旦出现提示,请尝试运行:

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;
});
}

关于dart - 使用 Process.start 设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com