Bor*_*jaX 2 python subprocess function call
我想知道是否有一种创建子过程(通过subprocess.Popen)的方法,该子过程会秘密地调用两个(或更多)preexec_fn。
例如,调用setegid和seteuid(仅出于示例目的)。
到目前为止,我发现了这种解决方法(很好...它可以工作,但是看起来不太...直接或“干净”)
#!/usr/bin/python2.7
import subprocess
import os
def preExecuter(listOfFunctions):
for functionEntry in listOfFunctions:
functionEntry["function"](* functionEntry.get("args", []), **functionEntry.get("kwargs", {}))
listOfFunctions = [
{
"function": os.setegid,
"args": [1000],
},
{
"function": os.seteuid,
"args": [1000],
},
]
if __name__ == "__main__":
sp = subprocess.Popen(["whoami"], preexec_fn=preExecuter(listOfFunctions))
sp.communicate()
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?先感谢您。
这甚至行不通,因为对preExecuter的调用实际上执行了setegid和seteuid操作,并且是在调用Popen之前完成的。怎么了
def my_pre_exec() :
os.setegid(1000)
os.seteuid(1000)
subprocess.Popen( ..., preexec_fn = my_pre_exec )
Run Code Online (Sandbox Code Playgroud)
怎么样...
subprocess.Popen( ..., preexec_fn = lambda : ( os.setegid(1000), os.seteuid(1000)) )
Run Code Online (Sandbox Code Playgroud)
...可能会舍弃该函数的返回值...