使用配置文件通过openVPN与Python连接

使用配置文件通过openVPN与Python连接,python,python-3.x,openvpn,Python,Python 3.x,Openvpn,我正试图从另一个国家运行的计算机上收集数据。使用Linux终端,我可以使用openVPN和.ovpn文件进行连接。然而,要进行自动API调用,我想使用Python 有没有办法通过Python进行连接并从.opvn文件获取连接详细信息?有点像SSHForwarder 大概是这样的: from openvpn_api import VPN v = VPN('199.249.9.9', 1194) with v.connection(): print(v.release) 非常感谢 Rutg

我正试图从另一个国家运行的计算机上收集数据。使用Linux终端,我可以使用openVPN和.ovpn文件进行连接。然而,要进行自动API调用,我想使用Python

有没有办法通过Python进行连接并从.opvn文件获取连接详细信息?有点像SSHForwarder

大概是这样的:

from openvpn_api import VPN
v = VPN('199.249.9.9', 1194)
with v.connection():
    print(v.release)
非常感谢


Rutger

您可以通过
子流程从脚本中运行console命令。run(args,stdout=PIPE,stderr=PIPE,universal\u newlines=True)

Args应该是这样的列表:
['sudo','/usr/local/sbin/openvpn','-config',home+'/path/to/config.ovpn']

例如:

import subprocess, os

home = os.environ["HOME"]
args = [
'sudo',
'/Mike/local/sbin/openvpn',
'--config',
home + '/Mike/Downloads/office.ovpn'
    ]
r = subprocess.run(args, stdout=PIPE, stderr=PIPE, universal_newlines=True)
...
# your code which needs to be connected to openvpn
...
# kill connection
r.stdout
另一种(更简单的)方法是使用subprocess.Popen():


我喜欢这个解决方案,没想到!谢谢
import subprocess, psutil

# define function to kill connection
def kill(proc_pid):
    process = psutil.Process(proc_pid)
    for proc in process.children(recursive=True):
        proc.kill()
    process.kill()

# use shell command to connect openvpn
r = subprocess.Popen(shell_command, shell=True)

...
# your code
...

# kill connection
kill(r.pid)