我已經閱讀了關於子進程的python文檔,但參數preexec_fn
對於subprocess.Popen
只能指向一個沒有參數的函數。python subprocess.popen使用帶參數的preexec_fn
現在我想用兩個參數調用一個函數,就像preexec_fn
一樣,我試過使用全局變量,但它不起作用。那我該怎麼辦?非常感謝。
對不起,我的英語不好。
我已經閱讀了關於子進程的python文檔,但參數preexec_fn
對於subprocess.Popen
只能指向一個沒有參數的函數。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!
that works!thanks much much:D –
,如果你的目標函數是很簡單的,你可能會想嘗試匿名函數(「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))
是你不能做'subprocess.check_output(CMD,preexec_fn = function_name(arg1,arg2))' – avasal