lo siento si me equivoqué con algunos hechos durante este pero solo he estado programando durante aproximadamente un año, desde que comencé un curso de computación en mi escuela, y lo siento si esta pregunta ha sido respondí antes de haber buscado en todas partes, pero no sé qué buscar. Recientemente me encontré con un juego en el que puede utilizar un inyector para inyectar código Python en ella, pero la única manera de encontrar los códigos es mediante el uso de:Intentando imprimir cada submódulo dentro de un módulo en python
import modulename
print dir(modulename)
y luego dir de impresión (modulename.submodulename)
Que imprimiría todos los submódulos dentro de ese módulo al archivo de registro del juego. Usando esta técnica he desarrollado un script que, cuando se ejecuta, busca todos los submódulos en ese directorio y los escribe en un archivo.
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()
Desafortunadamente, cuando se pasa el "algo.algo" los módulos son inexistentes. Aquí hay una muestra para el módulo "Aleatorio" donde "random.weibullvariate" es un módulo real pero algo más allá del segundo "." no está en los submódulos aleatorios.
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
Como puede ver, hay submódulos colocados que no existen en "al azar". Terminé averiguando cuál es el problema, pero no tengo experiencia suficiente para resolver el problema.
El problema es que el uso de las 2 primeras líneas como ejemplo
for a in dir(modulename):
a="module name"+"."+a
si lo hiciera un "modulename.submodule" Como se puede ver "a" es una cadena, y si a continuación, poner "a" en un "dir()" entonces lo mismo se devolvería sin importar el nombre de los submódulos.
Necesito encontrar una forma de agregar el submódulo al nombre de los módulos anteriores con un "." en el medio sin convertirlo en una cadena.
Perdón por la publicación larga, ¿alguien tiene alguna idea?
Probablemente me he equivocado con lo que está preguntando, de todos modos puede obtener el nombre del módulo con el atributo '__name__' y puede usar' '.'. Join (["paquete", "subpaquete", "módulo"] ]) 'para unir un número variable de campos con el punto. – Bakuriu
Voy a intentar esto, gracias. Voy a responder si llego a algún lado :) – Freshollie
¿Te refieres a esto? "para b en dir (". ". join ([nombremodelo, a])):" – Freshollie