[英]python: subprocess.Popen, openvpn command not found
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筆記本內核有什么特別之處嗎?
Jupyter可能不會選擇您的個人.bashrc
設置,這還取決於您如何運行它。 只需在您的Python腳本中硬編碼路徑或增加PATH
。
如果shell=False
,則不會擴展波浪線;否則,將不會擴展波浪線。 因此,您應該將其更改為os.environ["HOME"]
,或確保您知道在哪個目錄中運行此文件並使用相對路徑。
如果run
Popen()
您的要求,則不應使用Popen()
。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.