首页 文章

如何在python Subprocess中由另一个用户运行文件

提问于
浏览
0

我正在创建一个python脚本,它调用shell脚本并使用 Subprocess 在终端上运行该shell脚本 . 我的问题是我想由另一个用户运行该shell脚本 . 我的代码如下

Code:

import subprocess
filename = '/mount/test.sh'
p = subprocess.Popen([filename],shell=True,stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)

任何人都可以告诉我如何由另一个用户运行我的shell脚本?

注意:只有子进程部分应该由另一个用户运行,而不是主python脚本

1 回答

  • 1

    您可以尝试以下解决方案

    def change(user_uid, user_gid):
        def result():
            report_ids('starting demotion')
            os.setgid(user_gid)
            os.setuid(user_uid)
            report_ids('finished demotion')
        return result
    
    def report_ids(msg):
        print 'uid, gid = %d, %d; %s' % (os.getuid(), os.getgid(), msg)
    
    
    import subprocess
    filename = '/mount/test.sh'
    #mention UID and GID here
    p = subprocess.Popen(filename, preexec_fn=change(1000, 1000))
    result = p.wait()
    print(result)
    

    注意:我使用了check_output而不是Popen . 由于我无法测试,请原谅是否有任何拼写错误 . 另外,检查p.communicate是否与check_output一起使用 .

相关问题