2012-08-31 106 views
0

我已經閱讀了關於子進程的python文檔,但參數preexec_fn對於subprocess.Popen只能指向一個沒有參數的函數。python subprocess.popen使用帶參數的preexec_fn

現在我想用兩個參數調用一個函數,就像preexec_fn一樣,我試過使用全局變量,但它不起作用。那我該怎麼辦?非常感謝。

對不起,我的英語不好。

+0

是你不能做'subprocess.check_output(CMD,preexec_fn = function_name(arg1,arg2))' – avasal

回答

3

您可以通過使用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! 
+0

that works!thanks much much:D –

0

,如果你的目標函數是很簡單的,你可能會想嘗試匿名函數(「lambda函數」)。而且,您可以按照原樣放置此lambda函數,或者作爲函數對象(ex)f=lambda x,y: x+y,並且不需要使用部分或不導入的「functools」包。 (順便說一句,如果你希望只使用部分,還可以清理作爲'from functools import partial',並直接使用部分作爲本地功能。

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