首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >合并子进程stdout和stderr

合并子进程stdout和stderr
EN

Stack Overflow用户
提问于 2016-12-07 22:19:12
回答 2查看 2.5K关注 0票数 24

如何合并子进程stdout和stderr?

由于不能在stdoutstderr之间共享所有权,因此以下操作不起作用

let pipe = Stdio::piped();
let prog = Command::new("prog")
                        .stdout(pipe)
                        .stderr(pipe)
                        .spawn()
                        .expect("failed to execute prog");

换句话说,什么是外壳中2>&1的Rust等价物?

EN

回答 2

Stack Overflow用户

发布于 2020-06-24 05:39:27

我编写io-mux crate是为了提供一个多端的类似管道的构造;主要的用例是从进程中捕获标准输出和标准错误,正确地交错,并区分哪些数据来自哪个数据。有关如何使用它的示例,请参阅highlight-stderr

(io-mux主要在Linux上工作;它也可以在其他UNIX平台上工作,但由于UNIX套接字在这些平台上的行为,它有一些限制。)

如果您不关心区分哪些数据来自stdout,哪些数据来自stderr,那么可以使用普通管道。在UNIX上,使用libc::pipe创建管道,使用Stdio::from_raw_fd两次创建标准输出和标准错误,生成进程,然后从管道的另一端读取。在Windows上,您可以做类似的事情,使用句柄而不是文件描述符。

如果您不需要区分哪些数据来自标准输出,哪些数据来自标准错误,并且您不想处理设置管道的特定于平台的细节,那么可以尝试像subprocess这样的工具,它特别提到了对组合标准输出和标准错误的支持。

票数 1
EN

Stack Overflow用户

发布于 2021-01-24 05:41:48

我知道您问的是std::Command,但为了防止它对使用subprocess机箱的任何人有帮助,您可以使用Redirection::Merge

.stderr(Redirection::Merge)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41019780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档