In a 64-bit system with 32 bit python 2.7 installed I am trying to do the following:
import subprocess
p = subprocess.call('dir', shell=True)
print p
But this gives me:
Traceback (most recent call last):
File "test.py", line 2, in <module>
p = subprocess.call('dir', shell=True)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 709, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
If I in the terminal do...
dir
...it of course prints the present folder content.
I have tried to change the shell parameter to shell=False.
Edit: Actually I cannot call any executable on the path with subprocess.call()
. The statement p = subprocess.call('dir', shell=True)
works fine on another machine and I think that it is related.
If I do
subprocess.call('PATH', shell=True)
then I get
Traceback (most recent call last):
File "test.py", line 4, in <module>
subprocess.call('PATH', shell=True)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 709, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
If I do:
import os
print os.curdir
then I get
.
All of the above is executed in the terminal started in Administrator mode.
Before downvote, note that the question was edited after i posted this answer.
I think
os.listdir
is more suitable for your case:If you want to run it in the command line itself, and just feeling like to call it, you can use
os.sytem
:This will run the commmand, but it returns
0
and you can't store it.I think you may have a problem with your
COMSPEC
environment variable:I discovered this potential issue by digging into
subprocess.py
and looking in the_execute_child
function, as pointed-to by the traceback. There, you'll find a block starting withif shell:
that will search the environment for said variable and use it to create the arguments used to launch the process.In case anyone else besides me doesn't see this in the (3.4) docs right away: