我已经阅读了关于子进程的 python 文档,但是preexec_fn
for的参数subprocess.Popen
只能指向一个没有参数的函数。
现在我想用两个参数调用一个函数,就像preexec_fn
我尝试使用全局变量一样,但它不起作用。
我怎样才能做到这一点?
我已经阅读了关于子进程的 python 文档,但是preexec_fn
for的参数subprocess.Popen
只能指向一个没有参数的函数。
现在我想用两个参数调用一个函数,就像preexec_fn
我尝试使用全局变量一样,但它不起作用。
我怎样才能做到这一点?
functools.partial
您可以使用或 a传递参数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,你也可以清理 as'from functools import partial'
并直接使用 partial 作为你的本地函数。
<example with anonymous function>
import subprocess
subprocess.Popen(<cmd>, preexec_fn=(lambda x,y:x+y))