我想知道是否有一种方法可以创建一个subprocess(通过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()
有更好的方法吗?提前谢谢你。在
不如。。。在
。。。假设函数的返回值被丢弃。。。在
这甚至行不通,因为对prexecuter的调用实际上执行setegid和seteuid操作,并且是在调用Popen之前完成的。怎么了
如果您正在寻找延迟函数调用的通用方法:
现在你可以做了
^{pr2}$。。。因为defer_call_to返回一个函数在调用时执行延迟调用。在
如果您想要多个,现在可以正常工作:
但是,像我的另一个答案一样只写一个函数会更简洁
相关问题 更多 >
编程相关推荐