python – 重定向FD后如何写入stdout
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 重定向FD后如何写入stdout,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1428字,纯文字阅读大概需要3分钟。
内容图文
![python – 重定向FD后如何写入stdout](/upload/InfoBanner/zyjiaocheng/747/9754424c25774a5b84f0efdf2396c9d1.jpg)
请看下面的python代码.
so = open('/tmp/test.log', 'a+')
os.dup2(so.fileno(), sys.stdout.fileno())
在执行那段代码后,我仍然希望在标准的stdout上打印一些东西.
我已经尝试过:
print('Foo\n', file=sys.__stdout__)
按照documentation可能是一条路.
sys.__stdin__
sys.__stdout__
sys.__stderr__
These objects contain the original values of stdin, stderr and stdout
at the start of the program. They are used during finalization, and
could be useful to print to the actual standard stream no matter if
the sys.std* object has been redirected.
但事实并非如此.它仍然记录到我的test.log文件中.
Python版本:3.4.8
任何帮助将不胜感激.
解决方法:
sys .__ stdout__不起作用的原因是因为你用os.dup2()替换了原始stdout的文件描述符,所以任何基于它的Python文件对象都会打印到新打开的文件中.当你执行dup2时,旧的stdout实际上会被关闭,所以没有恢复它.
如果要将所有使用sys.stdout的Python代码打印到/tmp/test.log,请打开一个新文件并将其分配给sys.stdout.
sys.stdout = open('/tmp/test.log', 'a+')
原始的sys.stdout将作为sys .__ stdout__保持可用.
如果你想重定向直接写入sys.stdout.fileno()的任何代码,包括你用os.system()或subprocess.call()开始的子进程,同时保持对原始stdout的访问,事情变得更加复杂:你需要首先复制()stdout并保存,然后使用你的dup2()调用来替换FD 1:
saved_stdout_fd = os.dup(sys.stdout.fileno())
saved_stdout = os.fdopen(saved_stdout_fd,'w')
so = open('/tmp/test.log', 'a+')
os.dup2(so.fileno(), sys.stdout.fileno())
现在sys.stdout转到你的/tmp/test.log,saved_stdout将写入原始的stdout.
内容总结
以上是互联网集市为您收集整理的python – 重定向FD后如何写入stdout全部内容,希望文章能够帮你解决python – 重定向FD后如何写入stdout所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。