【问题标题】:python program seems to run another (local) program automatically without being requested to [closed]python程序似乎自动运行另一个(本地)程序而没有被请求[关闭]
【发布时间】:2013-10-07 11:10:35
【问题描述】:

(如果您反对将编程和幽默混为一谈,请直接跳到最后一段中的问题)

当一个 python 程序开始以 base64 编码打印其输出时,我们刚刚遇到了接近 x-files 的体验,而没有被要求这样做。实际上,它不是输出,而是它得到的标准输入的内容。事实上,程序试图读取标准输入但得到一个空字符串,然而标准输入被什么东西神秘地读取并传递给标准输出 base64 编码。

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

我听说这是可能与某些textwrap python 功能有关的预期行为。我不会告诉你我对这样一个“功能”的看法,但我找不到任何关于它的参考,我很好奇。不是针对文本换行,而是针对未经询问就使用附近发现的程序的现象。

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

(RHEL 5.7 上的 python 2.6)

编辑
我无法显示代码,因为真正的代码是专有的,我尝试提出的示例没有显示这种行为。
问题其实是这样的:

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

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

【问题讨论】:

  • @user2799617:我无法发布真正的代码,因为它是专有产品的一部分,而且与我所要求的现象无关的细节也会让人不知所措。我确实试图捏造一些小例子,但你猜怎么着? - 它没有发生在那里。我不是你知道的菜鸟。但是享受权力,何乐而不为
  • 响应暂停:正如我在编辑和评论中所说,我无法发布真实代码,也无法举例说明问题。考虑到它的模糊性,我相信这个问题已经被具体描述了。

标签: python base64 shared-libraries


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了!我自己也得出了同样的结论。此外,我们的 base64 程序不符合惯例,即不检查它是作为独立程序运行还是作为模块加载 - 只是读取输入并对其进行编码
猜你喜欢
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2017-01-20
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多