(如果你反对混合编程和幽默直接跳到最后一段中的问题)
当python程序开始以base64编码打印输出时,我们刚刚遇到了接近x文件的经历,而没有被要求。实际上,它不是输出,而是它得到的标准输入的内容。事实上,该程序试图读取stdin但得到一个空字符串,但stdin被某些东西神秘地读取并传递给stdout base64编码。
当我们达到这种完全困惑的状态时,有人注意到该目录包含另一个名为base64.py
的程序。当我们删除它时,行为恢复正常。
我听说这是一种可能与某些textwrap
python功能相关的预期行为。我会饶恕你对我这个“功能”的看法,但我找不到任何参考,我很好奇。不是文本包裹,而是在没有被问及的情况下使用在附近找到的程序的现象。
因此,如果有人关心解释和/或提供一些参考资料,我将不胜感激。
(RHEL 5.7上的python 2.6)
修改:
我无法显示代码,因为真正的代码是专有的,我试图提出的一个例子没有显示这种行为
问题是这样的:
在什么情况下python程序可以在同一目录中运行另一个名为base64.py
的程序并将其标准输入传递给它?
EDIT2:
编辑主题以更好地反映解决方案
上面textwrap
只是一个“红鲱鱼”
答案 0 :(得分:3)
base64
是a standard library module的名称。你提到还有另一个名为base64.py
的程序。当程序的某些部分尝试导入标准模块(或另一个依赖于base64
的模块)时,该程序被执行。
另见section 6.1.2. The Module Search Path in the tutorial:
包含正在运行的脚本的目录位于搜索路径的开头,位于标准库路径之前。这意味着将加载该目录中的脚本,而不是库目录中的同名模块。