将空CWD传递给子进程

时间:2014-09-22 13:11:00

标签: python subprocess

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

设置这样的var:

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'

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

答案是将默认kwarg cwd设置为None

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