python程序似乎自动运行另一个(本地)程序而不被请求

时间:2013-10-07 11:10:35

标签: python base64 shared-libraries

(如果你反对混合编程和幽默直接跳到最后一段中的问题)

当python程序开始以base64编码打印输出时,我们刚刚遇到了接近x文件的经历,而没有被要求。实际上,它不是输出,而是它得到的标准输入的内容。事实上,该程序试图读取stdin但得到一个空字符串,但stdin被某些东西神秘地读取并传递给stdout base64编码。

当我们达到这种完全困惑的状态时,有人注意到该目录包含另一个名为base64.py的程序。当我们删除它时,行为恢复正常。

我听说这是一种可能与某些textwrap python功能相关的预期行为。我会饶恕你对我这个“功能”的看法,但我找不到任何参考,我很好奇。不是文本包裹,而是在没有被问及的情况下使用在附近找到的程序的现象。

因此,如果有人关心解释和/或提供一些参考资料,我将不胜感激。

(RHEL 5.7上的python 2.6)

修改
我无法显示代码,因为真正的代码是专有的,我试图提出的一个例子没有显示这种行为 问题是这样的:

在什么情况下python程序可以在同一目录中运行另一个名为base64.py的程序并将其标准输入传递给它?

EDIT2:
编辑主题以更好地反映解决方案 上面textwrap只是一个“红鲱鱼”

1 个答案:

答案 0 :(得分:3)

base64a standard library module的名称。你提到还有另一个名为base64.py的程序。当程序的某些部分尝试导入标准模块(或另一个依赖于base64的模块)时,该程序被执行。

另见section 6.1.2. The Module Search Path in the tutorial

  

包含正在运行的脚本的目录位于搜索路径的开头,位于标准库路径之前。这意味着将加载该目录中的脚本,而不是库目录中的同名模块。