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

What is a pythonic way of running a Python routine as another user (e.g. root)?

本着 ("Don't call shell commands from Python. You can do everything in Python that shell commands can.") 的精神,这是给很多人的相当普遍的建议,我如何 运行 选定的个人例程(并且仅此例程)在 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)。但是,如果在我的示例中需要超级用户权限来发送信号,我必须通过子进程中的命令发送信号。我怎么能改用 os.kill 呢?

您不能 运行 Python 作为其他用户使用。

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