linux-连接到用于stdout和stderr的单独的pty的进程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-连接到用于stdout和stderr的单独的pty的进程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1181字,纯文字阅读大概需要2分钟。
内容图文
我正在写一个terminal logging program-想想脚本命令,但是功能更多一些.差异之一是,尽管脚本将stdout,stdin和stderr捕获为一个大字符流,但我想将它们分开并记录下来.
为此,我使用运行连接到pty的子shell的标准方法,但不是使用单个pty与stdin,stdout和stderr都连接到它,而是使用两个pty-将stdin和stderr连接到一个pty,另一个则是stdout.这样,主进程可以分辨出来自stdout的东西和来自stderr的东西.
到目前为止,这种方法运行良好.但是,我开始遇到一些问题.例如,当尝试设置列数时,得到以下信息:
$stty cols 169
stty: stdout appears redirected, but stdin is the control descriptor
这似乎是this piece of code的结果,它似乎在检查stdout和stderr是否都是ttys,但会抱怨它们是否不相同.
因此,我的问题是:我是否违反了有关以这种方式执行Posix进程行为的任何基本假设?如果没有,我为什么会看到这样的错误?如果是这样,我有什么办法可以解决这个问题,并且仍然可以很好地将stdout和stderr分开?
解决方法:
我对此的一个想法是直接在pty上使用一个进程,然后运行目标程序,例如
(wrapper) -> pty -> (controller) -> script
控制器将负责运行脚本并分别捕获stdout和stderr,也许通过一些非std fd将它们反馈回包装器,或者替代性地将数据序列化之后再运回.在stderr的输出前加上stderr:前缀,在stdout上加上stdout ::-然后在包装器中反序列化它,并将其反馈回上游或您想对其进行任何处理.
内容总结
以上是互联网集市为您收集整理的linux-连接到用于stdout和stderr的单独的pty的进程全部内容,希望文章能够帮你解决linux-连接到用于stdout和stderr的单独的pty的进程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。