OS X 10.13.6
Python 3.6
我正在尝试从jupyter笔记本运行以下命令:
vpn_cmd = '''
sudo openvpn
--config ~/Downloads/configs/ipvanish-US-Chicago-chi-a49.ovpn
--ca ~/Downloads/configs/ca.ipvanish.com.crt'''
proc = Popen(vpn_cmd.split(), stdout=PIPE, stderr=STDOUT)
stdout, stderr = proc.communicate()
print(stdout.decode())
但是得到错误:
sudo:openvpn:命令未找到
我尝试过的事情:
export PATH="/usr/local/sbin:$PATH"
,并可以从我的终端上运行sudo openvpn
命令sudo
不再提示输入密码sudo which openvpn
,并尝试将/usr/local/sbin/openvpn
添加到python中的sys.path vpn_cmd
并设置shell=True
proc.communicate()
行上--config
和--ca
标志的完整路径到目前为止,没有任何东西可以解决这个问题。我可以在终端上运行openvpn
了。似乎是一个简单的路径问题,但我无法弄清楚需要添加到python路径中的内容。 jupyter笔记本内核有什么特别之处吗?
答案 0 :(得分:0)
Jupyter可能不会选择您的个人.bashrc
设置,这还取决于您如何运行它。只需对路径进行硬编码或在Python脚本中增加PATH
。
使用shell=False
不会使波浪线膨胀;因此您应该将其更改为os.environ["HOME"]
,或确保您知道在哪个目录中运行此文件并使用相对路径。
如果Popen()
可以满足您的要求,则不应使用run
。
home = os.environ["HOME"]
r = subprocess.run(
['sudo', '/usr/local/sbin/openvpn',
'--config', home + '/Downloads/configs/ipvanish-US-Chicago-chi-a49.ovpn',
'--ca', home + '/Downloads/configs/ca.ipvanish.com.crt'],
stdout=PIPE, stderr=PIPE, universal_newlines=True)
print(r.stdout)