tags:

views:

1476

answers:

6

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!

A: 

You should be using os.popen() if you simply import os.

Andrew Austin
I also imported subprocess if that helps clarify anything
Tyler
You're invoking "Popen()" when in fact you should be using "os.popen()"
Andrew Austin
+4  A: 

Popen is defined in the subprocess module

import subprocess
...
subprocess.Popen(...)

Or:

from subprocess import Popen
Popen(...)
David Cournapeau
from subprocess import Popen;Popen(...)
van
After saying... process = os.Popen(cmd, stderr=STDOUT, stdout=PIPE)it now gives me the error... NameError: name 'STDOUT' is not defined
Tyler
process = subprocess.Popen(cmd,stderr=subprocess.STDOUT,stdout=subprocess.PIPE)
DoxaLogos
+1  A: 

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 *

Dan Lorenc
A: 

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)
Adam Rosenfield
+1  A: 

This looks like Popen from the subprocess module (python >= 2.4)

from subprocess import Popen
Kjetil Jorgensen
+5  A: 

you should do:

import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
SilentGhost
After that..WindowsError: [Error 3] The system cannot find the path specified
Tyler