将空CWD传递给子进程
问题描述:
。我想将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'
答
答案是设置默认kwarg cwd
到None
cwd = kwargs.get('cwd',None)
+1
'kwargs.get('cwd')''和'kwargs.get('cwd',None)'应该产生相同的结果。 – jfs 2014-09-22 15:05:55
答
检查功能可按的调用部分。 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'
显然,你的'kwargs'不包含' “CWD”'或'kwargs [ “CWD”]'是'没有'。 – NPE 2014-09-22 13:12:38
@NPE - 我已经重新澄清了我的问题。 – Boz 2014-09-22 13:32:50