9

处理一些代码,从命令提示符运行它时出现错误...

NameError: name 'Popen' is not defined

但我已经导入了import osimport 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]

我错过了一些基本的东西吗?我不会怀疑的。谢谢!

4

6 回答 6

37

你应该做:

import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.
于 2009-06-17T15:43:15.927 回答
7

Popen 在 subprocess 模块中定义

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

或者:

from subprocess import Popen
Popen(...)
于 2009-06-17T15:41:15.387 回答
2

当你导入一个模块时,模块的成员不会成为全局命名空间的一部分:你仍然需要在它们前面加上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)
于 2009-06-17T15:43:08.970 回答
1

如果您的导入如下所示:

import os

然后你需要像这样引用 os 中包含的东西:

os.popen()

如果您不想这样做,可以将导入更改为如下所示:

from os import *

不建议这样做,因为它可能导致命名空间模糊(代码中的内容与其他地方导入的内容冲突。)您也可以这样做:

from os import popen

哪个比 from os import * 更明确、更容易阅读

于 2009-06-17T15:42:13.637 回答
1

这看起来像来自子进程模块的 Popen (python >= 2.4)

from subprocess import Popen
于 2009-06-17T15:43:12.993 回答
-2

如果您只是导入 os.popen(),则应该使用 os.popen()。

于 2009-06-17T15:40:26.073 回答