【发布时间】:2020-10-22 09:37:28
【问题描述】:
我正在寻找一种跨平台解决方案,用于在 Rust 中模拟 TTY(PTY?),同时还管道 stdio。
前端基于显示交互式终端的网络技术。用户可以运行命令,他们的所有输入都将被发送到 Rust 后端,命令在那里被执行。 Std{in,out,err} 被向后发送以提供交互式体验。
这是一个简化的示例(仅管道标准输出):
let mut child = Command::new(command)
.stdout(Stdio::piped())
.spawn()
.expect("Command failed to start");
loop {
let read = reader.read(&mut chunk);
if let Ok(len) = read {
if len == 0 {
break;
}
let chunk = &chunk[..len];
send_chunk(chunk); // send chunk to frontend
} else {
eprintln!("Err: {}", read.unwrap_err());
}
}
目前,运行命令tty 打印:not a tty,但理想情况下,它应该输出一个文件名(例如/dev/ttys002)。而程序,例如atty 应该返回true。
仅在终端中运行后端,继承了 stdio 的作品,但是我无法将 stdio 发送回前端。
【问题讨论】:
标签: shell terminal rust tty pty