首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python“导入comtypes.client”间接调用pwd.py

Python“导入comtypes.client”间接调用pwd.py
EN

Stack Overflow用户
提问于 2015-04-24 20:06:37
回答 1查看 314关注 0票数 0

我对Python没有很深的经验。在最后一个应用程序上工作发现了一件非常有趣的事情。我将名为pwd.py的脚本放在与主脚本相同的目录中。我创建pwd.py是为了测试一些基本的模块和方法,没有更多的用途。

但是后来我发现我的主要脚本间接地调用了pwd.py,我真的很惊讶!我放置了一些调试输出,并发现导入语句"import comtypes.client“调用了pwd.py。

嗯.我想这可能是一些我还不知道的标准特征,但是:

  • PYTHON_HOME中的递归搜索(在我的例子中是C:\ Python 343)没有在标准Python目录中显示pwd.py。我甚至尝试通过c:\Python343 343中的文件内容进行递归搜索,以找出谁调用了pwd.py,但是这个搜索没有返回任何内容(我使用了Ctrl+F7的Ctrl+F7,可能有时会失败)。
  • 谷歌对pwd.py没有说过什么。

那么,它的特点是什么,为什么在任何地方都不能很好地描述它呢?这甚至是一种弱点。您可以在主脚本所在的同一个目录中创建pwd.py,并将任何代码放入pwd.py中.

有人能在自己的系统上检查一下这种行为吗?如果它真的有效,我在哪里可以找到这个特性的描述?

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 18:48:01

我发现“导入comtypes.client”行导致了这个“问题”。以下是主要脚本的内容:

代码语言:javascript
复制
#!C:\Python343\python
import comtypes.client # this line causes pwd.py to be called indirectly !!!

下面是放在同一个目录中的pwd.py的内容:

代码语言:javascript
复制
#!C:\Python343\python
print('pwd.py is called!')
raise RuntimeError("We got here!") # I put an exception as Kevin asked me above, but I am not sure that Python knows "throw" (it does not work for me) so use "raise"

在此之后,我得到了以下结果:

代码语言:javascript
复制
c:\dev>test.py
pwd.py is called!
Traceback (most recent call last):
  File "C:\dev\test.py", line 2, in <module>
    import comtypes.client # this line causes pwd.py to be called indirectly !!!
  File "C:\Python343\lib\site-packages\comtypes\client\__init__.py", line 31, in <module>
    from comtypes.client._code_cache import _find_gen_dir
  File "C:\Python343\lib\site-packages\comtypes\client\_code_cache.py", line 7, in <module>
    import ctypes, logging, os, sys, tempfile, types
  File "c:\Python343\Lib\tempfile.py", line 34, in <module>
    import shutil as _shutil
  File "c:\Python343\Lib\shutil.py", line 24, in <module>
    from pwd import getpwnam
  File "C:\dev\pwd.py", line 3, in <module>
    raise RuntimeError("We got here!")
RuntimeError: We got here!

所以呼叫链是:

代码语言:javascript
复制
C:\dev\test.py
C:\Python343\lib\site-packages\comtypes\client\__init__.py
C:\Python343\lib\site-packages\comtypes\client\_code_cache.py
c:\Python343\Lib\tempfile.py
c:\Python343\Lib\shutil.py
C:\dev\pwd.py

而“从pwd导入getpwnam”行似乎负责pwd.py的调用。在此之后,我以以下方式更改了我的主脚本:

代码语言:javascript
复制
#!C:\Python343\python
import pwd # I know it's you!

真的,它叫pwd.py!谢谢凯文这个简单的想法。剩下的唯一问题是,“导入pwd”从同一个目录调用pwd.py是否正确?非常有趣的特点:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29856520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档