Попен и питон - PullRequest
       25

Попен и питон

6 голосов
/ 17 июня 2009

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

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]

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

Ответы [ 6 ]

33 голосов
/ 17 июня 2009

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

import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
7 голосов
/ 17 июня 2009

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

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

Или:

from subprocess import Popen
Popen(...)
2 голосов
/ 17 июня 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)
1 голос
/ 17 июня 2009

Это выглядит как Popen из модуля подпроцесса (python> = 2.4)

from subprocess import Popen
1 голос
/ 17 июня 2009

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

import os

Тогда вам нужно сослаться на вещи, включенные в ОС, например:

os.popen()

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

from os import *

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

from os import popen

Который является более явным и более легким для чтения, чем из os import *

0 голосов
/ 17 июня 2009

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

...