Как запустить файл другим пользователем в подпроцессе python - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю скрипт на python, который вызывает скрипт оболочки и запускаю этот скрипт на терминале, используя Subprocess.Моя проблема в том, что я хочу запустить этот сценарий оболочки другим пользователем.Мой код указан ниже

Код:

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

Может кто-нибудь сказать мне, как запустить мой сценарий оболочки другим пользователем?

Примечание:

Другой пользователь должен выполнять только часть подпроцесса, а не основной скрипт Python

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете попробовать следующее решение

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...