Вопрос
Работаю над каким-то кодом, и при запуске из командной строки выдается ошибка...
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]
Я упускаю что-то элементарное?Я бы не сомневался в этом.Спасибо!
Решение
вы должны сделать:
import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
Другие советы
Popen определяется в модуле подпроцесса
import subprocess
...
subprocess.Popen(...)
Или:
from subprocess import Popen
Popen(...)
Когда вы импортируете модуль, члены модуля не становятся частью глобального пространства имен: вам все равно придется добавлять к ним префикс 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)
Это похоже на Popen из модуля подпроцесса (python > = 2.4)
from subprocess import Popen
Если ваш импорт выглядит так:
import os
Тогда вам нужно сослаться на вещи, включенные в os, следующим образом:
os.popen()
Если вы не хотите этого делать, вы можете изменить свой импорт следующим образом:
from os import *
Что не рекомендуется, потому что это может привести к неоднозначности пространства имен (вещи в вашем коде конфликтуют с вещами, импортированными в другое место.) Вы также можете просто сделать:
from os import popen
Который более понятен и проще для чтения, чем из os import *
Вы должны использовать os.popen (), если вы просто импортируете os.