我正在使用 python 3 并尝试将十六进制字符串转换为字节表示的形式。所以我使用了以下命令:
bytes.fromhex('97ad300414b64c')
Run Code Online (Sandbox Code Playgroud)
我期望的结果是这样的:b'\x97\xad\x30\x04\x14\xb6\x4c''但是得到了b'\x97\xad0\x04\x14\xb6L'。我注意到我做错了什么,但也许是编码问题?
python 3.6我正在尝试以不同的用户身份执行命令,popen但subprocess它仍然会以调用脚本的用户身份执行(我计划将其称为 root)。我正在使用线程,因此当两个线程并行执行时,不要侵犯用户权限,这一点很重要。
proc = subprocess.Popen(['echo $USER; touch myFile.txt'],
shell=True,
env={'FOO':'bar', 'USER':'www-data'},
stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
上面的例子仍然会用myFile.txt我的user_id 1000
我尝试了不同的方法:
尝试按照与长时间运行的Python进程不同的用户身份运行子进程中所述,通过复制os.environment并更改用户等
(注意这是针对python 2)
按照https://docs.python.org/3.6/library/subprocess.html#popen-constructor中的描述尝试使用start_new_session=True
我的最后一个选择是在命令前加上前缀sudo -u username command,但我认为这不是优雅的方式。