如何区分Python脚本在PuTTY SSH与VNC终端的运行环境?
区分SSH与VNC终端运行场景并实现对应浏览器打开逻辑
嘿,这个需求可以通过检查终端会话的环境变量来区分两种场景,下面是具体的实现方案:
核心判断依据
两种运行场景的环境变量有明显差异:
- SSH会话(PuTTY连接):系统会自动设置
SSH_CONNECTION、SSH_CLIENT或SSH_TTY环境变量,这些变量可以直接用来识别SSH连接环境。 - VNC终端会话:没有上述SSH相关变量,且虚拟机的终端会带有本地X显示的
DISPLAY变量(通常是:0、:1这类格式,代表虚拟机的桌面显示会话)。
Python实现代码
下面的代码会先判断当前运行环境,再执行对应浏览器打开逻辑:
import os import webbrowser def open_browser_based_on_environment(url="https://example.com"): # 判断是否为SSH会话 is_ssh = any(key in os.environ for key in ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"]) if is_ssh: # SSH场景:在虚拟机中打开浏览器 print("检测到SSH会话,将在虚拟机中打开浏览器") # Linux下优先用xdg-open调用系统默认浏览器,也可直接用webbrowser模块 # 注意:若SSH未开启X11转发,需改用无头浏览器或确保X11转发已配置(PuTTY中需开启对应选项) os.system(f"xdg-open {url}") # 替代方案:webbrowser.open(url) else: # VNC场景:在VNC本地机器(你的物理电脑)打开浏览器 print("检测到VNC终端会话,将在本地机器中打开浏览器") # 方案1:简单实现——把URL复制到VNC剪贴板,提示用户手动打开 os.system(f"echo {url} | xclip -selection clipboard") print(f"URL已复制到剪贴板,请在本地浏览器打开:{url}") # 方案2:自动触发本地浏览器(需本地运行一个轻量监听服务) # import requests # requests.get(f"http://你的本地IP:5000/open?url={url}") if __name__ == "__main__": open_browser_based_on_environment("https://your-target-url.com")
补充说明
- SSH场景的浏览器打开:如果虚拟机未开启X11转发,直接调用图形浏览器可能无法弹出窗口,这时候可以改用无头浏览器(比如Playwright、Selenium的无头模式),或者在PuTTY中开启X11转发选项。
- VNC本地浏览器自动触发:如果需要完全自动打开本地浏览器,最可靠的方式是在本地运行一个轻量的HTTP监听服务。比如用Flask写个简单服务:
之后虚拟机中的脚本调用# 本地运行的Flask服务,用来接收虚拟机的请求并打开浏览器 from flask import Flask, request import webbrowser app = Flask(__name__) @app.route('/open') def open_browser(): url = request.args.get('url') if url: webbrowser.open(url) return f"已打开URL: {url}" return "缺少URL参数" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)requests.get("http://你的本地IP:5000/open?url=xxx"),就能自动触发本地浏览器打开目标URL。
内容的提问来源于stack exchange,提问作者npatel
相关产品推荐
相关产品推荐

