Попен и питон

Работаю над некоторым кодом, и мне выдается ошибка при запуске из командной строки...

NameError: name 'Popen' is not defined

но я импортировал и import os, и import sys.

Вот часть кода

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]

Я пропустил что-то элементарное? Я бы не сомневался. Спасибо!


person Tyler    schedule 17.06.2009    source источник
comment
укажите версию Python. некоторые модули были изменены в python-2.6   -  person van    schedule 17.06.2009
comment
Python 2.5 После того, как я сказал... process = os.Popen(cmd, stderr=STDOUT, stdout=PIPE) теперь выдает ошибку... NameError: имя 'STDOUT' не определено   -  person Tyler    schedule 17.06.2009
comment
После этого.. WindowsError: [Ошибка 3] Система не может найти указанный путь   -  person Tyler    schedule 17.06.2009
comment
это не проблема Python. существует ли ваш exepath? вам нужно задать другой вопрос, чтобы получить правильные ответы об этой ошибке (это не имеет ничего общего с вашим первоначальным вопросом), этот вопрос исчерпал себя.   -  person SilentGhost    schedule 17.06.2009


Ответы (6)


ты должен сделать:

import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
person SilentGhost    schedule 17.06.2009
comment
После этого.. WindowsError: [Ошибка 3] Система не может найти указанный путь - person Tyler; 17.06.2009

Popen определяется в модуле подпроцесса

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

Or:

from subprocess import Popen
Popen(...)
person David Cournapeau    schedule 17.06.2009
comment
из подпроцесса import Popen; Поп (...) - person van; 17.06.2009
comment
После того, как я сказал... process = os.Popen(cmd, stderr=STDOUT, stdout=PIPE) теперь выдает ошибку... NameError: имя 'STDOUT' не определено - person Tyler; 17.06.2009
comment
процесс = подпроцесс.Popen(cmd,stderr=subprocess.STDOUT,stdout=subprocess.PIPE) - person Jay Atkinson; 17.06.2009

Когда вы импортируете модуль, члены модуля не становятся частью глобального пространства имен: вам все равно нужно добавлять к ним префикс modulename.. Итак, вы должны сказать

import os
process = os.popen(command, mode, bufsize)

Кроме того, вы можете использовать синтаксис from module import names для импорта вещей в глобальное пространство имен:

from os import popen    # Or, from os import * to import everything
process = popen(command, mode, bufsize)
person Adam Rosenfield    schedule 17.06.2009

Это похоже на Popen из модуля подпроцесса (python >= 2.4)

from subprocess import Popen
person Kjetil Joergensen    schedule 17.06.2009

Если ваш импорт выглядит так:

import os

Затем вам нужно сослаться на вещи, включенные в os, следующим образом:

os.popen()

Если вы не хотите этого делать, вы можете изменить свой импорт, чтобы он выглядел так:

from os import *

Это не рекомендуется, потому что это может привести к неоднозначности пространства имен (вещи в вашем коде конфликтуют с вещами, импортированными в другом месте). Вы также можете просто сделать:

from os import popen

Что более явно и легко читается, чем из os import *

person Dan Lorenc    schedule 17.06.2009

Вы должны использовать os.popen(), если вы просто импортируете os.

person Andrew Austin    schedule 17.06.2009
comment
Я также импортировал подпроцесс, если это поможет что-то прояснить. - person Tyler; 17.06.2009
comment
Вы вызываете Popen(), когда на самом деле вы должны использовать os.popen() - person Andrew Austin; 17.06.2009