Python 子流程:执行两个或多个preexec\u fn
我想知道是否有一种方法可以创建一个(通过Python 子流程:执行两个或多个preexec\u fn,python,function,call,subprocess,Python,Function,Call,Subprocess,我想知道是否有一种方法可以创建一个(通过subprocess.Popen)调用两个(或更多)preexec\u fn 例如,调用setegid和seteuid(仅用于示例目的) 到目前为止,我发现了这个解决方法(而且……它很有效,但看起来不太直接或“干净”) 有更好的方法吗?提前谢谢。这根本行不通,因为对preExecuter的调用实际上执行setegid和seteuid操作,并且是在调用Popen之前完成的。你怎么了 def my_pre_exec() : os.setegid(100
subprocess.Popen
)调用两个(或更多)preexec\u fn
例如,调用setegid
和seteuid
(仅用于示例目的)
到目前为止,我发现了这个解决方法(而且……它很有效,但看起来不太直接或“干净”)
有更好的方法吗?提前谢谢。这根本行不通,因为对preExecuter的调用实际上执行setegid和seteuid操作,并且是在调用Popen之前完成的。你怎么了
def my_pre_exec() :
os.setegid(1000)
os.seteuid(1000)
subprocess.Popen( ..., preexec_fn = my_pre_exec )
如果您正在寻找延迟函数调用的通用方法:
def defer_call_to( func, *parms, **kwparms ):
def caller():
func( *parms, **kwparms)
return caller
现在你可以做了
subprocess.Popen( ..., preexec_fn = defer_call_to( os.set_gid, 1000))
。。。由于defer_call_to返回函数,因此在调用时会执行延迟调用
如果您需要多个,现在可以正常工作:
sp = subprocess.Popen(["whoami"], preexec_fn=defer_call_to( preExecuter,listOfFunctions))
但是,像我的另一个答案那样编写一个函数会更简洁一些,那么
subprocess.Popen( ..., preexec_fn = lambda : ( os.setegid(1000), os.seteuid(1000)) )
。。。可能函数的返回值被丢弃了…好吧。。。问题是我想要一种更“通用”的方式;创建一个函数来接受几个预执行函数使用第二个调用不是“seteuid(1000)”而是“os.seteuid(1000),这是最接近我所寻找的。现在对这个答案不太满意,因为这基本上就是lambda函数的用途…preexec_fn=lambda:preExecuter(listOfFunctions))
subprocess.Popen( ..., preexec_fn = lambda : ( os.setegid(1000), os.seteuid(1000)) )