[Python-Dev] subprocess insufficiently platform-independent? (original) (raw)
Mark Hammond mhammond at skippinet.com.au
Wed Aug 27 05:08:49 CEST 2008
- Previous message: [Python-Dev] subprocess insufficiently platform-independent?
- Next message: [Python-Dev] subprocess insufficiently platform-independent?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Guido quotes a colleague:
""" Given a straightforward command list like:
cmd = 'svn', 'ls', '[http://rietveld.googlecode.com/svn/trunk'] You apparently cannot pass this list to any subprocess function (subprocess.call() or otherwise) with a set of arguments that allow it to "just work" on both Windows and non-Windows systems. If you call: subprocess.call(cmd, shell=False) Then it works on Linux, but fails on Windows because it does not perform the Windows %PATHEXT% search that allows it to find that "svn.exe" is the actual executable to be invoked.
I can't reproduce this as described.
subprocess.call(['svn', 'ls'], shell=False) svn: '.' is not a working copy 1
The reason this works is that Windows itself (CreateProcess) has support both for implied '.exe' extensions and searching $PATH. Thus, PATHEXT handling isn't required for executables.
I can reproduce with another extension - eg, 'svn.py' - for this test I had a 'foo.py' on my PATH (but not in the cwd), and .py in PATHEXT.
import subprocess subprocess.call(['foo'], shell=False) ... fails subprocess.call(['foo'], shell=True) Hello 0
So I can't see this problem for 'svn.exe' and at face value the behaviour on Windows looks quite correct - you do need the shell for this functionality on Windows (in the same way you would to execute a .bat file, for example)
If you call:
subprocess.call(cmd, shell=True) Then it works on Windows (it finds the "svn.exe" executable), but it fails on Linux because it only executes the first argument in the list ("svn") and does not pass the remaining arguments in the list to the "svn" invocation.
It sounds like in this particular example at least, this behaviour on Linux is the problem?
Mark
- Previous message: [Python-Dev] subprocess insufficiently platform-independent?
- Next message: [Python-Dev] subprocess insufficiently platform-independent?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]