2011-12-07 67 views
1

对于Linux系统,我正在编写一个Python程序,它产生了子进程。我正在使用“multiprocessing”库,我想知道是否有方法使用不同于当前用户的用户来调用子进程。我希望能够以不同的用户运行每个子进程(例如Postfix)。在Python中如何调用不同用户下的子进程?

任何想法或指针?

+0

什么叫究竟是你在用吗?与Popen你可以使用像preexec_fn = lambda:os.setuid(100) – sherpya

+0

我使用了一个multiprocessing.Process派生。设置uid/gid接缝是缺乏其API。 – edomaur

回答

3

修改Python文档举例来说,我已经添加的功能的setuid被调用,我不知道它符合你的需求,你可能还需要setgid的,sedeuid setegid

from multiprocessing import Process 
import os 

def info(title): 
    print title 
    print 'module name:', __name__ 
    print 'parent process:', os.getppid() 
    print 'process id:', os.getpid() 

def f(name): 
    os.setuid(1000) 
    info('function f') 
    print 'hello', name 
    os.system('id') 

if __name__ == '__main__': 
    info('main line') 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 
+0

啊是的!谢谢 !我在寻找一些太复杂的东西,你的例子会很好地做到这一点:D – edomaur

1

你可以看os.setpgid(pid,pgrp)方向。