从标准输入 rust 打印文件名

问题描述 投票:0回答:1

到目前为止,在我的研究中,我只发现能够将文件数据作为整个字符串或逐行读取,但无法将准确的文本写入标准输入。任何帮助将不胜感激。

我正在尝试使用 Rust 制作一个可执行文件,它应该将标准输入中的文件名保存为字符串。

执行我的代码时,我正在做:

cargo run < filename.csv

我期望我的输出是

filename.csv
,但我得到的是:
Stdin { .. }

我的倾向是应该有某种方法可以在开始读取我的文件的字节之前“捕获”输入,但我在这里迷失了。

这是我正在运行的代码,我将整个输入作为字符串读取,试图通过它来查找文件扩展名(.csv),但我没有找到任何内容:

    let stdin = io::read_to_string(io::stdin());
    println!("{:?}",stdin);
rust input executable cargo
1个回答
0
投票

在 Linux 式操作系统上的大多数典型 shell 上,您的二进制文件(rust 或其他)在这种情况下不知道其标准输出来自哪里。 shell 负责打开

filename.csv
文件描述符进行读取,并确保它是随后启动的进程的标准输入(在 Linux 上,这是文件描述符 0)。

获取文件名不一定是可能的(例如标准输入可能是匿名管道),并且它可能不指向文件(例如它可能指向Linux上的pty);此外,获取文件名的过程是系统相关的。

在 Linux 上,您可以将

std::fs::read_link
/proc/self/fd/0
一起使用,但要注意它可能不是文件名。在我的 Linux 机器上,快速测试时我会得到文件名
/dev/pts/...
pipe:[...]
作为输出。

© www.soinside.com 2019 - 2024. All rights reserved.