Вопрос

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top