我已经阅读了关于子流程的python文档,但subprocess.Popen
的参数preexec_fn
只能指向没有参数的函数。
现在我想调用一个有两个参数的函数,就像preexec_fn
一样,我尝试过使用全局变量,但它不起作用。
我该怎么做?
您可以使用functools.partial
或lambda
:传递参数
>>> 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!
如果目标函数足够简单,您可能需要尝试匿名函数("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))