如何阻止pyvis在Ubuntu终端默认启动elinks浏览器?
解决Pyvis自动启动CLI浏览器干扰Vi的问题
问题背景
在Ubuntu远程终端下使用Vi编辑器时,运行Pyvis代码生成网络可视化HTML文件时,会自动启动CLI浏览器elinks,即使手动退出,elinks仍在后台运行,不断弹出菜单干扰Vi的命令模式操作。尝试添加xdg-open命令后出现权限和参数错误。
错误原因
nt.show()方法默认会在生成HTML文件后自动调用系统浏览器打开,远程终端无图形界面时,系统会 fallback 到CLI浏览器(如elinks),导致后台进程残留。- 手动添加的
os.system("xdg-open /dev/null foo.html")参数顺序错误,xdg-open不支持这种写法,同时远程终端无可用图形浏览器,触发一系列找不到浏览器的错误。
修复方案
核心修改:用write_html()替代show()
Pyvis的Network.write_html()方法仅负责生成HTML文件,不会自动调用浏览器,完全避免后台启动浏览器的问题。同时修正代码中的语法错误:
from pyvis.network import Network import networkx as nx g = nx.MultiGraph() g.add_node(0, label='node 0', title='Node 1', shape='ellipse', size=125) g.add_node(1, label='node 1', title='Node 2', shape='ellipse', size=125) g.add_node(2, label='node 2', title='Node 3', shape='ellipse', size=125) g.add_edge(0, 1, label='e1_1', title='e1_1', arrows="false") g.add_edge(0, 1, label='e1_2', title='E1_2', arrows="false") g.add_edge(0, 2, label='e2', title='E2', arrows="false") nt = Network(directed=True) nt.from_nx(g) nt.set_edge_smooth('dynamic') # 修正set_options中的语法错误:dynamic需要加引号 nt.set_options(''' var options = { "nodes": { "size": 100 }, "edges": { "arrowStrikethrough": false, "color": { "inherit": false }, "font": { "size": 3, "align": "top" }, "smooth": "dynamic" } } ''') # 仅生成HTML文件,不打开浏览器 nt.write_html('foo.html')
额外调整说明
- 移除了多余的
nt.show()调用,避免重复生成文件和触发浏览器。 - 修正
set_options中smooth: dynamic的语法错误,字符串类型的值需要用双引号包裹。 - 删除无效的
os.system调用,彻底规避xdg-open相关错误。
验证方法
运行修改后的代码:
$ python foo.py
此时只会在当前目录生成foo.html文件,不会启动任何浏览器,后台也不会残留elinks进程,Vi编辑器的操作不会再被干扰。
内容的提问来源于stack exchange,提问作者Quiescent
相关产品推荐
相关产品推荐

