为了防止这成为一个 XY 问题,我会告诉你问题,以及我不知道该怎么做的建议解决方案。
我正在尝试在脚本中调用 webbrowser 模块。
import webbrowser
webbrowser.open_new_tab('http://stackoverflow.com')
这真是太棒了。但是,我希望能够压缩它给我的输入。在我当前的机器(ubuntu)上,我的浏览器(firefox)通过 stderr 吐出一堆废话。我希望能够调用 webbrowser 并消除显示的文本。
我试过的:
1使用 popen 以便我可以将进程传输到任何内容。
from subprocess import Popen, PIPE
Popen(['python -m webbrowser \'' + url + '\''], stderr=PIPE,
stdout=PIPE, shell=True)
为什么这不起作用
这实际上在非无头模式下效果很好!当我在 ssh 终端(无头模式)中使用它时,子进程方面不允许我看到无头终端浏览器,这是 webbrowser 的一个非常酷的功能。
2重定向标准错误
我不能只在python中重定向stderr,因为python脚本通常在网络浏览器完成打印之前结束,所以在脚本结束后,webbrowser的进程会继续在终端中打印。
我也尝试过:抑制模块调用外部库的输出没有运气
我不能在调用 python webbrowser 时使用以下建议:suppress/redirect stderr,因为我想webbrowser
选择默认浏览器。
可能的解决方案(只有其中一种就足够了):
有没有办法知道我是否处于无头模式?如果我知道我处于 ssh/headless 模式,我可以将一种方法用于无头模式,另一种用于非无头模式。
有没有办法做 webbrowser.get('default').open() 以便 webbrowser 不给我垃圾?
有没有办法在不使用子进程的情况下“管道”浏览器的输出?
还有什么能解决问题的...