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

前端之家收集整理的这篇文章主要介绍了试图在python中打印模块内的每个子模块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对不起,如果我在这期间弄错了一些事实,但我只编程了大约一年,因为我在我的学校开始了一个计算机课程,对不起,如果这个问题在我到处看之前已经得到了回答,但我不知道是什么搜索.最近我发现了一个游戏,您可以使用注入器将python代码注入其中,但找到代码的唯一方法是使用:

  1. import modulename
  2. print dir(modulename)

然后
        print dir(modulename.submodulename)

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

  1. import modulename
  2. myfile=open("name.txt","w")
  3. myfile.write("modulename\n")
  4. for a in dir(modulename):
  5. a="modulename"+"."+a
  6. for b in dir(a):
  7. b=a+"."+b
  8. for c in dir(b):
  9. c=b+"."+c
  10. if ".__" in c:
  11. pass
  12. elif "._" in c:
  13. pass
  14. else:
  15. myfile.write(c+"\n")
  16. if ".__" in b:
  17. pass
  18. if "._" in b:
  19. pass
  20. else:
  21. myfile.write(b+"\n")
  22. if ".__" in a:
  23. pass
  24. if "._" in a:
  25. pass
  26. else:
  27. myfile.write(a+"\n")
  28. print "Done"
  29. myfile.close()

不幸的是,当运行“something.something”时,模块不存在.这是模块“随机”的示例,其中“random.weibullvariate”是一个真实的模块,但是经过第二个“.”的任何东西.不在随机子模块中.

  1. random.weibullvariate.title.translate
  2. random.weibullvariate.title.upper
  3. random.weibullvariate.title.zfill
  4. random.weibullvariate.title
  5. random.weibullvariate.translate.capitalize
  6. random.weibullvariate.translate.center
  7. random.weibullvariate.translate.count
  8. random.weibullvariate.translate.decode
  9. random.weibullvariate.translate.encode
  10. random.weibullvariate.translate.endswith
  11. random.weibullvariate.translate.expandtabs
  12. random.weibullvariate.translate.find
  13. random.weibullvariate.translate.format
  14. random.weibullvariate.translate.index
  15. random.weibullvariate.translate.isalnum
  16. random.weibullvariate.translate.isalpha
  17. random.weibullvariate.translate.isdigit
  18. random.weibullvariate.translate.islower
  19. random.weibullvariate.translate.isspace
  20. random.weibullvariate.translate.istitle
  21. random.weibullvariate.translate.isupper
  22. random.weibullvariate.translate.join
  23. random.weibullvariate.translate.ljust
  24. random.weibullvariate.translate.lower
  25. random.weibullvariate.translate.lstrip
  26. random.weibullvariate.translate.partition
  27. random.weibullvariate.translate.replace
  28. random.weibullvariate.translate.rfind
  29. random.weibullvariate.translate.rindex
  30. random.weibullvariate.translate.rjust
  31. random.weibullvariate.translate.rpartition
  32. random.weibullvariate.translate.rsplit
  33. random.weibullvariate.translate.rstrip
  34. random.weibullvariate.translate.split
  35. random.weibullvariate.translate.splitlines
  36. random.weibullvariate.translate.startswith
  37. random.weibullvariate.translate

正如您所看到的那样,存在“随机”中不存在的子模块.
我最终解决了问题所在,但我没有足够的经验来解决问题.

问题是以前两行为例

  1. for a in dir(modulename):
  2. a="module name"+"."+a

如果我这样做的话
        一个
        “modulename.submodule”
正如你可以看到“a”是一个字符串,如果我然后将“a”放入“dir()”中,那么无论子模块名称是什么,都会返回相同的内容.

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

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

最佳答案
  1. import types
  2. def list_modules(module_name):
  3. try:
  4. module = __import__(module_name,globals(),locals(),[module_name.split('.')[-1]])
  5. except ImportError:
  6. return
  7. print(module_name)
  8. for name in dir(module):
  9. if type(getattr(module,name)) == types.ModuleType:
  10. list_modules('.'.join([module_name,name]))

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

猜你在找的Python相关文章