gpt4 book ai didi

process - 如何向进程发送数据?

转载 作者:行者123 更新时间:2023-12-02 00:18:33 26 4
gpt4 key购买 nike

我正在尝试编写一个 dart 服务器应用程序,它将与接受输入并提供输出的应用程序通信,例如 unix 工具 bc。

我可以读取 bc 的输出,但我无法向 bc 发送命令。这是我的代码:

#import('dart:io');

void main() {
var p = Process.start('bc', ["-i"]);
var stdoutStream = new StringInputStream(p.stdout);

stdoutStream.onLine = () => print(stdoutStream.readLine());
p.stdin.writeString("quit\n");

p.onExit = (exitCode) {
print('exit code: $exitCode');
p.close();
};
}

当我运行它时,出现以下错误:

Unhandled exception:
SocketIOException: writeList failed - invalid socket handle
0. Function: '_Socket@14117cc4.writeList' url: 'dart:io' line:4808 col:48
1. Function: '_SocketOutputStream@14117cc4._write@14117cc4' url: 'dart:io' line:4993 col:70
2. Function: '_SocketOutputStream@14117cc4.write' url: 'dart:io' line:4969 col:29
3. Function: '_BaseOutputStream@14117cc4.writeString' url: 'dart:io' line:5197 col:3
4. Function: '::main' url: 'file:///var/www/html/example.dart' line:8 col:22

如果我注释掉我尝试写“quit\n”的行,那么它就会运行,我可以看到 bc 的输出。

那么如何让我的程序向我的服务器上的应用程序发送命令,例如 bc?

最佳答案

问题是您在进程正确启动之前写入标准输入。尝试:

#import('dart:io');

void main() {
var p = Process.start('bc', ["-i"]);
var stdoutStream = new StringInputStream(p.stdout);

stdoutStream.onLine = () => print(stdoutStream.readLine());
p.onStart = () => p.stdin.writeString("1+1\nquit\n");

p.onExit = (exitCode) {
print('exit code: $exitCode');
p.close();
};
}

关于process - 如何向进程发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911228/

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