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

Python“;导入comtypes.client“;间接调用pwd.py,python,import,Python,Import,我对Python没有深入的经验。在上一个应用程序上工作发现了非常有趣的事情。我将名为pwd.py的脚本放在与主脚本相同的目录中。我创建pwd.py是为了测试一些基本模块和方法,没有其他用途 但我真的很惊讶,后来发现我的主脚本间接调用pwd.py!我放了一些调试打印输出,发现import语句“import comtypes.client”调用pwd.py 嗯……我想这可能是一些我还不知道的标准功能,但是: PYTHON_主页中的递归搜索(在我的例子中是C:\Python343)在标准PYTHON

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

但我真的很惊讶,后来发现我的主脚本间接调用pwd.py!我放了一些调试打印输出,发现import语句“import comtypes.client”调用pwd.py

嗯……我想这可能是一些我还不知道的标准功能,但是:

  • PYTHON_主页中的递归搜索(在我的例子中是C:\Python343)在标准PYTHON目录中不显示pwd.py。我甚至尝试通过c:\Python343中的文件内容进行递归搜索,以查找调用pwd.py的用户,但此搜索没有返回任何结果(我使用了Ctrl+F7的Total Commander搜索,有时可能会失败)

  • 谷歌说关于pwd.py没有什么众所周知的

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

有人可以在自己的系统上检查此行为吗?如果它真的有效,我在哪里可以找到此功能的描述?

我发现“import comtypes.client”一行导致了此“问题”。 以下是主脚本的内容:

#!C:\Python343\python
import comtypes.client # this line causes pwd.py to be called indirectly !!!
下面是放在同一目录中的pwd.py的内容:

#!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"
之后我得到了以下结果:

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!
“from pwd import getpwnam”行似乎负责调用pwd.py。 之后,我以以下方式更改了我的主脚本:

#!C:\Python343\python
import pwd # I know it's you!
真的,它叫pwd.py!谢谢凯文这个简单的想法。
剩下的唯一问题是,“import pwd”从同一目录调用pwd.py是否正确?非常有趣的功能:-)

我无法重现这种行为。你能提供一个完整的例子(当然可能是导入的)来展示这个行为吗?我去掉了
pwd
标签;此问题与标记所属的
pwd
命令无关。请在
pwd.py
顶部放置
throw RuntimeError(“我们到了!”)
语句,并向我们显示回溯。
#!C:\Python343\python
import pwd # I know it's you!