Working on some code and I'm given the error when running it from the command prompt...
NameError: name 'Popen' is not defined
but I've imported both import os and import sys.
Here's part of the code
exepath = os.path.join(EXE File location is here)
exepath = '"' + os.path.normpath(exepath) + '"'
cmd = [exepath, '-el', str(el), '-n', str(z)]
print 'The python program is running this command:'
print cmd
process = Popen(cmd, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
Am I missing something elementary? I wouldn't doubt it. Thanks!
-
specify version of Python. some modules were changed in python-2.6van– van2009年06月17日 15:47:56 +00:00Commented Jun 17, 2009 at 15:47
-
1Python 2.5 After saying... process = os.Popen(cmd, stderr=STDOUT, stdout=PIPE) it now gives me the error... NameError: name 'STDOUT' is not definedTyler– Tyler2009年06月17日 15:53:18 +00:00Commented Jun 17, 2009 at 15:53
-
After that.. WindowsError: [Error 3] The system cannot find the path specifiedTyler– Tyler2009年06月17日 18:13:46 +00:00Commented Jun 17, 2009 at 18:13
-
this is not a Python issue. does your exepath exist? you need to ask another question to get proper answers re this error (it has nothing to do with your original question), this question has run its course.SilentGhost– SilentGhost2009年06月17日 18:56:41 +00:00Commented Jun 17, 2009 at 18:56
6 Answers 6
you should do:
import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
1 Comment
Popen is defined in the subprocess module
import subprocess
...
subprocess.Popen(...)
Or:
from subprocess import Popen
Popen(...)
3 Comments
When you import a module, the module's members don't become part of the global namespace: you still have to prefix them with modulename.. So, you have to say
import os
process = os.popen(command, mode, bufsize)
Alternatively, you can use the from module import names syntax to import things into the global namespace:
from os import popen # Or, from os import * to import everything
process = popen(command, mode, bufsize)
Comments
This looks like Popen from the subprocess module (python>= 2.4)
from subprocess import Popen
Comments
If your import looks like this:
import os
Then you need to reference the things included in os like this:
os.popen()
If you dont want to do that, you can change your import to look like this:
from os import *
Which is not recommended because it can lead to namespace ambiguities (things in your code conflicting with things imported elsewhere.) You could also just do:
from os import popen
Which is more explicit and easier to read than from os import *
Comments
You should be using os.popen() if you simply import os.