我在用Python3运行一些shell命令 os.system
需要以root身份运行。
我试过
os.system("sudo su")
os.system("other commands")
也
home_dir = os.system("sudo su")
os.system("other commands")
但是上面两个脚本都只是成为root,然后停止执行,所以我的其他命令都没有执行。
我正在运行 Python 3.6.9
在Ubuntu 18.04虚拟机上。
通过以下方式获得的root权限 sudo
只适用于通过 sudo 运行的命令,而不会提高调用者的权限 (在本例中,你的 python 脚本)。所以你的第一条命令 os.system("sudo su")
将会运行一个交互式的root shell,但是在你退出之后,你的python代码会执行后续的对 os.system("other commands")
这些命令将在其普通用户权限下运行。
你可以通过sudo每次运行一个命令。
os.system("sudo some_command")
os.system("sudo some_other_command")
请注意,每条命令都会被单独记录在案 sudo
在系统日志中,而且即使有几个命令。sudo
不应该在很短的时间间隔内多次要求输入密码。
或者如果你需要做一连串的步骤,比如改变目录,而这些步骤在调用者中可能是不可能的(例如,如果运行python脚本的非root用户无法访问该目录),那么你可以这样做。
os.system("sudo sh -c 'cd some_dir && some_other_command'")
(仅供参考。&&
类似于 ;
但另一条命令只有在 cd
成功,所以比较安全,尽管这一点与 shell 语法有关,而不是与 python 有关)。)
如果有很多命令,当然你也可以选择单独制作一个 "helper "shell-script,然后通过sudo运行整个脚本。
os.system("sudo sh /path/to/myscript.sh")
最后需要注意的是,如果你是在非交互式环境中运行python脚本,你可能需要告诉 sudo
不提示密码,至少在相关的调用用户和目标命令中是如此。 详情请参见 man sudoers
并寻找涉及 NOPASSWD
.