c - 重定向(重定向的标准错误)到标准输出
问题描述
标题有点混乱,因为这可能是一个 XY 问题。
我知道这2&>1
会将程序的标准错误重定向到标准输出。
这是我的问题。我正在尝试这样做:
popen("echo Y > /sys/class/.../somefile.txt", "r")
并检测命令是否失败。如果我在 stderr 上看到以下内容,我知道命令是否从 CLI 失败:
-sh: echo: write error: Device or resource busy
但是,无论我尝试什么,我似乎都无法捕获此输出。
如果我这样做 popen("echo Y > /sys/class/.../somefile.txt 2&>1", "r")
,它只是将原始 echo 语句的标准错误重定向到标准输出,而不是重定向操作的标准错误。在这种情况下,如何检测命令是否失败?我也尝试检查返回代码,pclose
但这似乎也没有改变(总是0
)。
解决方案
重定向的顺序很重要。正如你所写,顺序是:
- 将标准输出重定向到
somefile.txt
. - 将 stderr 重定向到现在的任何 stdout。
你想要的是:
- 将标准错误重定向到原始标准输出。
- 将标准输出重定向到
somefile.txt
.
所以使用:
popen("cmd 2>&1 >somefile.txt", "r")
推荐阅读
- android - 如何更改 Xamarin 项目的 Android 主题?
- github - GitHub搜索GUI中单引号和双引号有什么区别
- laravel - 处理 Lumen API 内存耗尽错误的最佳方法是什么
- hyperledger-fabric - 错误:ID 为“$sysregistries”的集合中 ID 为“Asset:org.supplychain.food.model.LiveAsset”的对象不存在”
- javascript - jQuery .append() 和 .attr() 的这种组合可以被 XSS 攻击利用吗?
- c++ - 如何在我的进程中运行的二进制文件中注册 Op 和 Kernel?
- typescript - 打字稿如何克隆除一键外的对象
- python - scikit-learn 高斯过程回归的错误输出
- c# - 如何解决“此 SQLTransaction 已完成;它不再可用?(linq/EF)
- javascript - 如何在 Javascript 中使用 DOM 在 HTML 父标签中多次插入相同的图像?