【问题标题】:name 'STDOUT' is not defined though subprocess is imported尽管导入了子流程,但未定义名称“STDOUT”
【发布时间】:2023-04-02 03:36:02
【问题描述】:

我在使用 STDOUT 时遇到错误

>>> import subprocess
>>>print STDOUT

回溯(最近一次通话最后一次): 文件“”,第 1 行,在 NameError: 名称“STDOUT”未定义

它也适用于

from subprocess import STDOUT

但是如果模块中有很多这样的常量,有没有办法在不明确提及的情况下导入模块中定义的任何此类常量。

【问题讨论】:

  • 在使用 subprocess.STDOUT 时它可以工作 >>>print subprocess.STDOUT -2 >>>>

标签: python constants


【解决方案1】:

您需要告诉 Python 在哪里可以找到“STDOUT”,即在“子进程”模块中。这就是为什么当您指定“subprocess.STDOUT”时它起作用的原因。如果您希望能够引用 STDOUT 而不必总是为模块命名,请像这样导入它:

from subprocess import STDOUT

或者,如果您正在使用子流程中的所有函数和类,则可以像这样将它们全部导入

from subprocess import *

但是出于很多充分的理由,建议您尽可能避免这种情况(请参阅What exactly does "import *" import?)。否则,您可能应该只导入将在 import 语句中用作元组的所有方法和类:

from subprocess import STDOUT, popen, call

【讨论】:

  • 同意它可以工作,但是如果你有很多这样的常量怎么办?例如,在其他要使用的子模块中?应该有一种方法可以使用子模块中定义的常量而不使用“from module import CONST”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多