Выполнение Python Client Server Query - PullRequest
1 голос
/ 09 июля 2019

У меня есть программа клиент-сервер.Клиентский демон работает на нескольких хостах через root-логин.В клиентской программе я использовал «subprocess .Popen» для выполнения команды.Я хочу записать ошибку o / p этой команды в файл, общий доступ к которому осуществляется через NFS, через имя пользователя, отправившего задание.

Но поскольку клиент работает через root, он попытался записать файл rootошибка входа в систему и разрешение на выбрасывание.

Ниже приведен код:

def demote(self,user_uid, user_gid):
    def result():

        os.setgid(user_gid)
        os.setuid(user_uid)

    return result

def log_file(self,myList = [], *args):
    try:
        with open(myList[-1], 'a+') as file:
            fcntl.flock(file, fcntl.LOCK_EX | fcntl.LOCK_NB)
            file.write(myList[0])
            fcntl.flock(file, fcntl.LOCK_UN)
    except IOError as e:
        print('err in file locking')

proc = subprocess.Popen(cmd1,shell=True, stdout=subprocess.PIPE, preexec_fn=self.demote(user_uid, user_gid),stderr=subprocess.PIPE,env=my_env)
output,error = proc.communicate()
output = output.decode("utf-8")
error = error.decode("utf-8")
print("Here is the O/p")
print(output)
print("Here is the error")
print(error)
exit_code = proc.returncode
logfile="/home/user/abd"
if output:
    print("I have some O/P")
    print(output)
    self.log_file([output,logfile])
if error:
    print("I have some error")
    print(error)
    self.log_file([error,logfile])

self.conn.send(repr(exit_code).encode('utf-8'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...