2014-09-22 36 views
0

。我想将cwd传递给使用子进程的方法。将空CWD传递给子进程

设置这样的变种:

cwd = kwargs.get('cwd')

再后来用它在这样的方法:

process = subprocess.Popen(list(command), 
         shell=False, 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         cwd=cwd) 

我希望能够设置一个默认的,如果没有kwarg“CWD '通过。目的是创建清晰简单的代码,并避免if语句。

如果没有kwargs.get默认我得到一个错误:

[Errno 2] No such file or directory: 'None'

+0

显然,你的'kwargs'不包含' “CWD”'或'kwargs [ “CWD”]'是'没有'。 – NPE 2014-09-22 13:12:38

+0

@NPE - 我已经重新澄清了我的问题。 – Boz 2014-09-22 13:32:50

回答

0

答案是设置默认kwarg cwdNone

cwd = kwargs.get('cwd',None)

+1

'kwargs.get('cwd')''和'kwargs.get('cwd',None)'应该产生相同的结果。 – jfs 2014-09-22 15:05:55

1

检查功能可按的调用部分。 cwd=None应该正常工作。

>>> subprocess.call(['ls'], cwd=None) 
0 

我怀疑来电者传递字符串'None'

>>> subprocess.call(['ls'], cwd='None') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory: 'None'