[英]Rust Non-interactive stdin read
我正在为 rust 编写一个 cli 程序,我想要实现的感觉应该很简单,但结果却是一个巨大的麻烦。 基本上我希望能够将 pipe 数据输入程序,但是每当我使用io::stdin
时,如果没有任何东西在管道中,我会得到一个交互式环境,我必须按 Enter。 反正有没有将整个标准输入读入一个字符串,如果没有什么就继续前进吗?
抱歉,没有代码片段,但我对此一无所知。
编辑 1) 尝试使用atty
实现,但似乎无法使代码正常工作。
let stdin = io::stdin();
for line in stdin.lock().lines() {
if atty::isnt(atty::Stream::Stdin) {
println!("{}", line.unwrap());
} else {
break;
}
}
由于“一切都是文件”的理念,很难区分从控制台/用户读取和从文件读取(除了使用atty:is 之外)。
如果您不想要任何输入,您还可以将程序的标准输入重定向到/dev/null
:
./the_program < /dev/null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.