gpt4 book ai didi

python - 尝试在python中打印模块内的每个子模块

转载 作者:行者123 更新时间:2023-12-04 20:15:45 26 4
gpt4 key购买 nike

抱歉,如果我在此期间弄错了一些事实,但自从我在学校开始计算机类(class)以来,我只编程了大约一年,抱歉,如果在我到处寻找之前已经回答了这个问题,但我不知道是什么寻找。最近我发现了一个游戏,你可以使用注入(inject)器将 python 代码注入(inject)其中,但找到代码的唯一方法是使用:

    import modulename
print dir(modulename)

进而
打印目录(模块名。子模块名)

它将将该模块内的所有子模块打印到游戏的日志文件中。使用这种技术,我开发了一个脚本,它在执行时会找到该目录中的所有子模块并将它们写入一个文件。
import modulename

myfile=open("name.txt","w")
myfile.write("modulename\n")

for a in dir(modulename):
a="modulename"+"."+a
for b in dir(a):
b=a+"."+b
for c in dir(b):
c=b+"."+c
if ".__" in c:
pass
elif "._" in c:
pass
else:
myfile.write(c+"\n")
if ".__" in b:
pass
if "._" in b:
pass
else:
myfile.write(b+"\n")
if ".__" in a:
pass
if "._" in a:
pass
else:
myfile.write(a+"\n")

print "Done"
myfile.close()

不幸的是,当运行通过“something.something”时,模块不存在。这是模块“随机”的示例,其中“random.weibullvariate”是一个真正的模块,但任何超过第二个“。”不在随机子模块中。
random.weibullvariate.title.translate
random.weibullvariate.title.upper
random.weibullvariate.title.zfill
random.weibullvariate.title
random.weibullvariate.translate.capitalize
random.weibullvariate.translate.center
random.weibullvariate.translate.count
random.weibullvariate.translate.decode
random.weibullvariate.translate.encode
random.weibullvariate.translate.endswith
random.weibullvariate.translate.expandtabs
random.weibullvariate.translate.find
random.weibullvariate.translate.format
random.weibullvariate.translate.index
random.weibullvariate.translate.isalnum
random.weibullvariate.translate.isalpha
random.weibullvariate.translate.isdigit
random.weibullvariate.translate.islower
random.weibullvariate.translate.isspace
random.weibullvariate.translate.istitle
random.weibullvariate.translate.isupper
random.weibullvariate.translate.join
random.weibullvariate.translate.ljust
random.weibullvariate.translate.lower
random.weibullvariate.translate.lstrip
random.weibullvariate.translate.partition
random.weibullvariate.translate.replace
random.weibullvariate.translate.rfind
random.weibullvariate.translate.rindex
random.weibullvariate.translate.rjust
random.weibullvariate.translate.rpartition
random.weibullvariate.translate.rsplit
random.weibullvariate.translate.rstrip
random.weibullvariate.translate.split
random.weibullvariate.translate.splitlines
random.weibullvariate.translate.startswith
random.weibullvariate.translate

正如你所看到的,有一些“随机”不存在的子模块被放入。
我最终找出了问题所在,但我没有足够的经验来解决问题。

问题在于以前两行为例
for a in dir(modulename):
a="module name"+"."+a

如果我这样做了
一种
“模块名.子模块”
如您所见,“a”是一个字符串,如果我将“a”放入“dir()”中,那么无论子模块名称是什么,都会返回相同的内容。

我需要找到一种方法将子模块添加到带有“。”的先前模块名称中。中间没有把它变成一个字符串。

对不起,很长的帖子,有人有什么想法吗?

最佳答案

import types

def list_modules(module_name):
try:
module = __import__(module_name, globals(), locals(), [module_name.split('.')[-1]])
except ImportError:
return
print(module_name)
for name in dir(module):
if type(getattr(module, name)) == types.ModuleType:
list_modules('.'.join([module_name, name]))

不能声称这适用于所有情况,但值得一试吗?

关于python - 尝试在python中打印模块内的每个子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com