gpt4 book ai didi

python - 如何仅重定向流的一部分?

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:26 26 4
gpt4 key购买 nike

我在 Linux 上的 bash 上使用 Python。我希望能够抑制来自特定模块的错误消息,但保留其他错误消息。一个示例可能是传达我想要的内容的最有效方式:


文件:module.py

import sys
sys.stderr.write('Undesired output.\n')

文件:script.py

import module
import sys

sys.stderr.write('Desired output.\n')
sys.stdout.write('Desired output.\n')
x = int('a')

运行script.py的输出:

$ python script.py
Undesired output.
Desired output.
Desired output.
Traceback (most recent call last):
File "script.py", line 6, in <module>
x = int('a')
ValueError: invalid literal for int() with base 10: 'a'

运行 script.py 所需的输出:

$ python script.py
Desired output.
Desired output.
Traceback (most recent call last):
File "script.py", line 6, in <module>
x = int('a')
ValueError: invalid literal for int() with base 10: 'a'

我不能修改module.py,但我必须使用它。我已经尝试了各种重定向,并打开了新的文件描述符,但我似乎无法从 python 中更改调用 shell 的文件描述符,所以

$ python script.py 2>/dev/null
Desired output.

杀死所有 stderr 输出。因为我知道模块导致了不需要的消息,所以我确切地知道我想停止将 stderr 重定向到 /dev/null 并开始将其重定向到 &1,但我似乎无法从 Python 中完成它。

非常感谢任何建议!

最佳答案

接受的答案中有一个示例可能对您有帮助

Temporarily Redirect stdout/stderr

但在你的情况下,它假设你可以做

import module

之后

import sys

并且之后您已经在 Python 代码中重定向了 stderr。喜欢

import sys

... redirect code here

import module

... code to remove redirect

除了重定向之外,不知道这是否会破坏您想要的功能。

此外,您不应该在代码中间插入 import 语句,因为它违反了 PEP8 风格指南。

关于python - 如何仅重定向流的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com