我有一个 centos 7 虚拟机,我需要 sudo 权限才能在 python 脚本中运行某些 shell 命令。#!/usr/bin/env python3.7
我的脚本顶部有一个,运行它sudo ./script.py
会出现/usr/bin/env: python3.7: No such file or directory
错误。如何以 sudo 身份运行我的代码?澄清一下,如果我简单地输入 ,它就会运行./script.py
,但是permission denied
当脚本尝试执行 3 个特定命令时,我会得到一个 ,因此需要 sudo 。
echo $PATH
结果:
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/centos/.local/bin:/home/centos/bin:/home/centos/.local/bin:home/centos/bin
sudo echo $PATH
给出与上面相同的结果。
type python3.7
给我:
python3.7 is /usr/local/bin/python3.7
答案1
存在很多问题
#!/usr/bin/env python3.7
第一个是,它python3.7
必须位于运行脚本的用户的路径中。显然,对于您的 root 用户来说,情况并非如此。
第二个是,它运行python3.7
PATH 中的第一个。当您明确请求版本 3.7 时,这可能不是一个大问题,但我遇到过许多#!/usr/bin/env python
运行 3 而不是所需的 2 等的 -s。
这就是为什么我不建议使用#!/usr/bin/env
.
您的问题有 3 种解决方案:
- 放入
/usr/local/bin/
root 的 PATH 中(不推荐,因为local
; 这就是它不在 PATH 中默认的原因) #!/usr/local/bin/python3.7
在你的脚本中使用。如果您在 python 所在的其他系统上使用它,这可能会中断/usr/bin
- 使用 python 的默认安装,
python
位于/usr/bin
;我建议仅使用#!/usr/bin/python3
而不是子版本。