无法从命令行以 sudo 方式执行 python 脚本

无法从命令行以 sudo 方式执行 python 脚本

我有一个 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.7PATH 中的第一个。当您明确请求版本 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而不是子版本。

相关内容