
Question:
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!
Solution:1
you should do:
import subprocess subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) # etc.
Solution:2
Popen is defined in the subprocess module
import subprocess ... subprocess.Popen(...)
Or:
from subprocess import Popen Popen(...)
Solution:3
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)
Solution:4
This looks like Popen from the subprocess module (python >= 2.4)
from subprocess import Popen
Solution:5
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 *
Solution:6
You should be using os.popen() if you simply import os.
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon