I am getting the following error:
WindowsError: [Error 2] The system cannot find the file specified
My code is:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bit. Python 3.x latest, stable.
Any ideas?
Thanks,
I am getting the following error:
WindowsError: [Error 2] The system cannot find the file specified
My code is:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bit. Python 3.x latest, stable.
Any ideas?
Thanks,
When the command is a shell built-in, add a shell=True
to the call.
E.g. for dir
you would type:
import subprocess
subprocess.call('dir', shell=True)
To quote from the documentation:
The only time you need to specify
shell=True
on Windows is when the command you wish to execute is built into the shell (e.g. dir or copy). You do not needshell=True
to run a batch file or console-based executable.
On Windows, I believe the subprocess
module doesn't look in the PATH
unless you pass shell=True
because it use CreateProcess()
behind the scenes. However, shell=True
can be a security risk if you're passing arguments that may come from outside your program. To make subprocess
nonetheless able to find the correct executable, you can use shutil.which
. Suppose the executable in your PATH
is named frob
:
subprocess.call([shutil.which('frob'), arg1, arg2])
(This works on Python 3.3 and above.)
After much head scratching, I discovered that running a file that is located in C:\Windows\System32\ while running a 32bit version of python on a 64bit machine is a potential issue, due to Windows trying to out-smart the process, and redirect calls to C:\Windows\System32 to C:\Windows\SysWOW64.
I found an example of how to fix this here: http://code.activestate.com/recipes/578035-disable-file-system-redirector/