python - 从子进程python多线程调用中以提升的权限运行bash脚本

标签 python bash subprocess sudo

我正在 Linux 上使用 python 进行编程,并且使用 multiprocessing_pool.apply_async 来使用 subprocess.check_output 调用 bash 脚本

bash 脚本正在调用alien 和rpmbuild。 Alien 命令需要以 root 身份运行,因此 rpmbuild 命令也需要以 root 身份运行,遵循 root sed 命令来纠正一些 rpm 特性。

目前,如果我想将多个 deb 转换为 rpm,我必须多次输入管理员密码。

有没有办法让我只能输入一次管理员密码? 也就是说,脚本总是以其不同的变量作为新进程被调用,但总是在输入一个密码后提升权限? 目前我正在使用 pkexec 来调用脚本,并在脚本本身中使用 sudo。

非常感谢

最佳答案

如果您以 super 用户身份运行 python 脚本,该脚本不应询问您密码:

$ sudo python -c "import os ; os.system('whoami')"
root

所以像平常一样运行你的东西,但在python之前使用sudo。如果您需要运行多个 python 脚本并且只需输入一次密码,请输入 sudo su。然后,您将成为所有命令的 root 用户(无需预先添加 sudo),直到关闭终端 session 。

提供密码的其他方法:

  1. 如果您希望出现输入密码的 GUI 提示,可以使用 sudo -A
  2. 如果您想将密码作为标准输入传递,可以使用sudo -S

每个进程都有自己的用户,您必须创建多个进程才能拥有多个用户。

关于python - 从子进程python多线程调用中以提升的权限运行bash脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774092/

相关文章:

python - 如何在 Python 中模拟函数以更改默认关键字参数

linux - 仅回显有效用户

linux - 尝试从现有 for 循环中的文件读取

并行的 Python 子进程

python - 使用 os.kill() 后如何确定子进程何时终止?

python - 删除 Pandas 列的最佳方法是什么

python - 在 Django 1.5 中使用自定义用户模型作为 ForeignKey 进行测试

Python-Subprocess-Popen 在多线程环境下的不一致行为

python - 如何使用 FastAPI 在 Swagger UI 中显示来自 HTMLResponse 的实际 HTML 页面?

linux - 如何重新运行 bash 脚本,跳过之前成功运行的行?