python subprocess.popen使用带参数的preexec_fn

时间:2012-08-31 04:18:07

标签: python python-2.7

我已阅读有关子进程的python文档,但preexec_fn的参数subprocess.Popen只能指向没有参数的函数。

现在我想调用一个带有两个参数的函数,就像preexec_fn所做的一样,我试图使用全局变量,但它没有用。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以使用functools.partiallambda

传递参数
>>> import functools
>>> def need_two_arguments(a,b):
...     print a + b
... 
>>> no_arguments_needed = functools.partial(need_two_arguments, "Hello, ", "World!")
>>> no_arguments_needed()
Hello, World!
>>> no_arguments_needed = (lambda: need_two_arguments("Hello, ", "World!"))
>>> no_arguments_needed()
Hello, World!

答案 1 :(得分:0)

如果你的目标函数足够简单,你可能想尝试匿名函数(“lambda函数”)。并且,您可以将此lambda函数原样放置,或者作为函数对象(ex)f=lambda x,y: x+y放置,并且不需要使用部分或导入“functools”包。 (顺便说一句,如果你只想使用partial,你也可以清理为'from functools import partial'并直接使用partial作为你的本地函数。

<example with anonymous function> import subprocess subprocess.Popen(<cmd>, preexec_fn=(lambda x,y:x+y))