gpt4 book ai didi

rust - 从 git 钩子(Hook)调用时,stdin read_line 不等待用户输入

转载 作者:行者123 更新时间:2023-11-29 08:04:09 24 4
gpt4 key购买 nike

我是一个绝对的 Rust 初学者,试图构建一个简单的确认功能(是或否),但我无法让用户输入任何内容,该功能只是不断循环而不等待用户输入:

""
""
""
etc.

是下面简化版的结果。

use std::process;
use std::io;

pub fn confirm() {
loop {
let mut answer = String::new();

io::stdin().read_line(&mut answer)
.ok()
.expect("Failed to read line");

println!("{:?}", answer);
}
}

我围绕 guessing game 构建了我的函数例如,我程序的其余部分什么也不做,只是读取文件和打印文本。

可能是因为我的程序(git hook)的启动方式?

最佳答案

假设问题是你的 git commit hook 在 non-interactive environment 中运行,您可以按照该问题中的建议直接打开 /dev/tty。与 STDIN 不同,我们不将其视为神奇的全局变量,而是将其传递到我们需要的地方:

use std::io::{self, BufRead, BufReader};
use std::fs::File;

type Tty = BufReader<File>;

fn open_tty() -> io::Result<Tty> {
let f = try!(File::open("/dev/tty"));
Ok(BufReader::new(f))
}

fn confirm(tty: &mut Tty) -> io::Result<String> {
let mut answer = String::new();
try!(tty.read_line(&mut answer));
Ok(answer)
}

fn inner_main() -> io::Result<()> {
let mut tty = try!(open_tty());
let answer = try!(confirm(&mut tty));

println!("The answer was: {}", answer);

Ok(())
}

fn main() {
inner_main().unwrap()
}

请注意,这与平台无关。具体来说,这不太可能在 Windows 上运行!

我还继续并允许 io::Result 在整个程序中传播,只在最外层的 shell 发生 panic 。

关于rust - 从 git 钩子(Hook)调用时,stdin read_line 不等待用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665889/

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