python - 作为另一个用户(例如 root)运行 Python 例程的 pythonic 方式是什么?

标签 python linux sudo privileges

本着this answer的精神(“不要从 Python 调用 shell 命令。您可以在 Python 中执行 shell 命令可以执行的所有操作。”),这是给很多人的相当普遍的建议,我如何运行选定的单个例程 (并且只有这个例程)在 Python 程序中作为另一个用户,例如root,以 pythonic(并且有点安全)方式?

例如,我在一些代码中有这样一个例程:

import os
import signal
import subprocess

def kill_proc(pid, k_signal = signal.SIGINT, sudo = False):
    if sudo:
        subprocess.Popen(['sudo', 'kill', '-%d' % k_signal, '%d' % pid]).wait()
    else:
        os.kill(pid, k_signal)

如果我不需要成为 root,我可以在这个例子中调用 os.kill(pid, k_signal)。但是,如果在我的示例中需要 super 用户权限来发送信号,我必须通过子进程中的命令发送信号。我怎样才能改用 os.kill

最佳答案

您不能以其他用户身份运行 Python 函数。

类 Unix 操作系统将每个进程与特定用户相关联。除非最初的所有者是根用户,否则不能将进程重新分配给其他用户。 Python 函数不是进程,不能有自己的用户。

关于python - 作为另一个用户(例如 root)运行 Python 例程的 pythonic 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892057/

相关文章:

python - python 类层次结构问题

c - 查找文件操作的 CPU 使用率

ruby - 从 rake 任务中以 sudo 身份执行命令?

linux - AWS Linux sudo : unable to resolve host

python - 如何在 Python 3 中向 matplotlib 2.0 `ax` 对象添加黑色边框?

python - 在 Python 中获取 DictReader 标题的特殊情况

python - 具有多个输入的网络的超参数优化?

c - 有没有一种工具可以知道一个值是否具有作为浮点变量的精确二进制表示?

linux - 如何配置 jenkins master slave,其中 master 在 linux 上,slave 在 windows 机器上

python - 以 root 身份运行结构脚本