簡體   English   中英

python:subprocess.Popen,openvpn命令未找到

[英]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:找不到命令

我試過的

  • 在我的〜/ .bash_profile中添加了export PATH="/usr/local/sbin:$PATH"並可以從我的終端運行sudo openvpn命令
  • 編輯了我的sudoers文件,因此sudo不再提示輸入密碼
  • 稱為sudo which openvpn並嘗試將/usr/local/sbin/openvpn到python中的sys.path
  • 不拆分vpn_cmd並設置shell=True
  • 嘗試將其包裝在test.py腳本中並從終端執行,但它只是掛在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM