Вы можете попробовать следующее решение
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.