Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当脚本在虚拟机上运行时,如何在本地计算机上打开具有特定URL的web浏览器?_Python_Python 2.7_Python Webbrowser - Fatal编程技术网

Python 当脚本在虚拟机上运行时,如何在本地计算机上打开具有特定URL的web浏览器?

Python 当脚本在虚拟机上运行时,如何在本地计算机上打开具有特定URL的web浏览器?,python,python-2.7,python-webbrowser,Python,Python 2.7,Python Webbrowser,我使用putty ssh从本地机器连接到虚拟机,并在虚拟机上运行python脚本。从脚本中,我想在本地计算机上打开一个带有特定URL的web浏览器。使用python是否可以这样做 SimpleHTTPServer正在虚拟机上运行,并且HTML文件存在于虚拟机上,因此我可以使用localhost:8080在虚拟机上打开URL,对于本地机,我可以使用虚拟机的主机名:8080。 如果必须在虚拟机上打开web浏览器,我可以使用以下方法: import webbrowser url = "http://l

我使用putty ssh从本地机器连接到虚拟机,并在虚拟机上运行python脚本。从脚本中,我想在本地计算机上打开一个带有特定URL的web浏览器。使用python是否可以这样做

SimpleHTTPServer
正在虚拟机上运行,并且
HTML
文件存在于虚拟机上,因此我可以使用
localhost:8080
在虚拟机上打开URL,对于本地机,我可以使用虚拟机的主机名
:8080。

如果必须在虚拟机上打开web浏览器,我可以使用以下方法:

import webbrowser
url = "http://localhost:8080/"
webbrowser.open_new(url)
但是,如果我想在本地web浏览器上使用虚拟机的主机名打开相同的URL,则不确定可以使用什么:

import os
hostname = os.uname()[1]
url = "http://%s:8080/" % hostname  # this hostname is virtual machine's hostname
print "Opening this URL in your browser: %s" % url
# Here I have to open a web browser manually and copy the URL.
# Looking for something which can open web browser automatically.

当您使用虚拟机时,您完全切换到该环境。另外,当您引用localhost时,它指向虚拟机上的该端口,而不是您的本地计算机。一个最好的方法是使用您的主机IP地址。将代码更改为

import webbrowser
url = "<your-local-Ip-address>:8080/"
如果可能,在默认浏览器的新页面(“选项卡”)中打开url, 否则相当于open_new()

您还可以在启动服务器之前将主机导出到ip地址。。
如果这种方法倒退。尝试使用诸如ngrok或localtunnel之类的服务将本地主机公开到公共云并访问该URl,但这样做很慢,而且不是推荐的方式

您可以利用这样一个事实,即当您通过SSH连接时,服务器(虚拟机)上的环境变量中将存在SSH客户端(您的本地机)IP

import os
import webbrowser
connection = os.environ.get('SSH_CONNECTION')  #corrected keyword
client_ip, client_port, server_ip, server_port = connection.split()
url = "http://{hostname}:8080/".format(hostname=client_ip)
webbrowser.open(url)

webbrowser.open(url[,new=0[,autoraise=True]])
-这行给出了
SyntaxError:无效语法
url=“:8080/”
-这是错误的,我想打开虚拟机上存在的html文件,而SimpleHTTPServer正在虚拟机上运行,不是在本地机器上。直到上一次编辑我的错误,你的问题才解释了这一点。很抱歉造成混淆。要使本地计算机打开网页,您需要在本地计算机上运行脚本。因此,您可以尝试在本地计算机上运行Python脚本,该脚本使用ssh库(或者可能将putty作为子进程调用)连接到远程计算机并在那里运行脚本。然后,本地计算机上的Python脚本应该从远程会话检索相关URL,并在本地启动网页。您的措辞可能含糊不清或被误解。您的目标是在本地计算机上打开浏览器吗?或者让虚拟机上的浏览器打开一个指向本地机器的url?换句话说,浏览器进程应该在本地计算机上运行还是在虚拟机上运行?我已经编辑了这个问题,并澄清了
SimpleHTTPServer
在哪里运行。我想知道您是否成功运行了它。我也想使用这种类型的功能。它显示了
与:8080建立HTTP连接并挂在那里。请确保本地计算机和虚拟机上的防火墙都允许通过端口8080进行通信,并且本地计算机正在该端口上接受外部连接。您可以手动将该地址放在浏览器中查看页面吗?我必须在URL中给出虚拟机的主机名,
SimpleHTTPServer
正在虚拟机上运行,而不是在本地机器上运行。那么简单地使用
localhost
不应该对您有效吗?您提到脚本正在虚拟机上运行,如果Web服务器也在虚拟机上运行,则不涉及本地机。如果您希望从虚拟机控制本地机器,则需要另一台车辆进行该通信。出于您的意图和目的,您的虚拟机应该被视为一台完全不同的计算机。正确。SSH服务器(虚拟机)无法向客户端(本地计算机)发出命令。要做到这一点,您需要在本地计算机上运行一个服务器,用于侦听连接/命令。
webbrowser.open_new_tab(url)
import os
import webbrowser
connection = os.environ.get('SSH_CONNECTION')  #corrected keyword
client_ip, client_port, server_ip, server_port = connection.split()
url = "http://{hostname}:8080/".format(hostname=client_ip)
webbrowser.open(url)