Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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:subprocess.Popen,未找到openvpn命令_Python_Path_Subprocess_Jupyter - Fatal编程技术网

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

python:subprocess.Popen,未找到openvpn命令,python,path,subprocess,jupyter,Python,Path,Subprocess,Jupyter,OSX10.13.6Python3.6 我正在尝试从jupyter笔记本运行以下命令: 但是得到错误: sudo:openvpn:未找到命令 我所尝试的: 将export PATH=“/usr/local/sbin:$PATH”添加到我的~/.bash_配置文件中,并可以从我的终端运行sudo openvpn命令 编辑了我的sudoers文件,因此sudo不再提示输入密码 调用了sudo哪个openvpn,并尝试将/usr/local/sbin/openvpn添加到python中的my sy

OSX10.13.6
Python3.6

我正在尝试从jupyter笔记本运行以下命令:

但是得到错误:

sudo:openvpn:未找到命令

我所尝试的:

  • export PATH=“/usr/local/sbin:$PATH”
    添加到我的~/.bash_配置文件中,并可以从我的终端运行
    sudo openvpn
    命令
  • 编辑了我的sudoers文件,因此
    sudo
    不再提示输入密码
  • 调用了
    sudo哪个openvpn
    ,并尝试将
    /usr/local/sbin/openvpn
    添加到python中的my sys.path
  • 不拆分
    vpn\u cmd
    并设置
    shell=True
  • 尝试将其打包到test.py脚本中并从终端执行,但它只是挂起在
    proc.communicate()
  • 指定了
    --config
    --ca
    标志的完整路径

到目前为止,还没有解决这个问题。我可以在我的终端上运行
openvpn
。这似乎是一个简单的路径问题,但我不知道需要向python路径添加什么。jupyter笔记本内核有什么特别之处吗?

jupyter可能没有选择您的个人
.bashrc
设置,这也取决于您运行它的方式。只需在Python脚本中硬编码路径或扩充路径

使用
shell=False
时,不会展开波浪线;因此,您应该将它们更改为
os.environ[“HOME”]
,或者确保您知道在哪个目录下运行此操作,并使用相对路径

如果
run
可以满足您的要求,则不应使用
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)

Jupyter可能没有选择您的个人
.bashrc
设置,这也取决于您运行它的方式。只需在Python脚本中硬编码路径或扩充路径

使用
shell=False
时,不会展开波浪线;因此,您应该将它们更改为
os.environ[“HOME”]
,或者确保您知道在哪个目录下运行此操作,并使用相对路径

如果
run
可以满足您的要求,则不应使用
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)

非常感谢,就这样。很高兴了解run vs Popen,我会仔细阅读的。当然,也许是upvote和/或accept?顺便说一句,这里有一个关于Popen vs run和相关问题的更详细的答案:对不起,我确实尝试过投票,但它说我的声誉太低了。我能接受它,尽管非常感谢,我做到了。很高兴了解run vs Popen,我会仔细阅读的。当然,也许是upvote和/或accept?顺便说一句,这里有一个关于Popen vs run和相关问题的更详细的答案:对不起,我确实尝试过投票,但它说我的声誉太低了。不过我还是接受了