The docs for Popen mention that you can't specify your executable path relative to the 'change working directory' kwarg.
If cwd
is not None, the child’s current directory will be changed to
cwd
before it is executed. Note that this directory is not
considered when searching the executable, so you can’t specify the
program’s path relative to cwd
.
But python's behaviour on my system seems to directly contradict this claim:
/tmp$ mkdir a
/tmp$ cp /bin/ls /tmp/a/my_ls
/tmp$ mkdir b
/tmp$ touch /tmp/b/potato
/tmp$ cd /home/wim
~$ python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import check_output
>>> check_output(['../a/my_ls'], cwd='/tmp/b')
'potato
'
>>> check_output(['../a/my_ls'])
OSError: [Errno 2] No such file or directory
Is using relative paths to cwd
something that is platform dependent and shouldn't be relied upon? Or is this a documentation bug?
(this question spawns from a comment by glglgl here)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…