Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: retr02332 en 30 Noviembre 2019, 05:15 am



Título: Duda con el modulo os de python3
Publicado por: retr02332 en 30 Noviembre 2019, 05:15 am
def root_check(self):
      try:
         check = os.listdir(os.sep.join([os.environ.get("SystemRoot",r'C:\windows'),'temp']))
         #check = os.listdir(r"C:\Windows\Temp")
      except:
         self.admin = "\nNo eres usuario root."
      else:
         self.admin = "\nEres usuario root."

La parte que esta comentada la hice yo, porque no entiendo muy bien lo que esta a la derecha del igual de check, es decir. Desde os.listdir hasta Temp.

os.listdir lista el directorio, tal cual como hacer un dir.

pero desde os.sep.join empieza lo desconocido.

Agradeceria que me dieran sus conocimientos respecto a esta duda, y como ingrediente final, me guataria saber porque se usa os.sep.join y no os.path.join?.

sin mas que decir, muchas gracias y que tengan un excelente dia.


Título: Re: Duda con el modulo os de python3
Publicado por: @XSStringManolo en 30 Noviembre 2019, 17:27 pm
def root_check(self):
      try:
         check = os.listdir(os.sep.join([os.environ.get("SystemRoot",r'C:\windows'),'temp']))
         #check = os.listdir(r"C:\Windows\Temp")
      except:
         self.admin = "\nNo eres usuario root."
      else:
         self.admin = "\nEres usuario root."

La parte que esta comentada la hice yo, porque no entiendo muy bien lo que esta a la derecha del igual de check, es decir. Desde os.listdir hasta Temp.

os.listdir lista el directorio, tal cual como hacer un dir.

pero desde os.sep.join empieza lo desconocido.

Agradeceria que me dieran sus conocimientos respecto a esta duda, y como ingrediente final, me guataria saber porque se usa os.sep.join y no os.path.join?.

sin mas que decir, muchas gracias y que tengan un excelente dia.
Código
  1. def root_check(self):
  2.      try:
  3.         check = os.listdir(os.sep.join([os.environ.get("SystemRoot",r'C:\windows'),'temp']))
  4.         #check = os.listdir(r"C:\Windows\Temp")
  5.      except:
  6.         self.admin = "\nNo eres usuario root."
  7.      else:
  8.         self.admin = "\nEres usuario root."

defdefine una función.
(self)acepta un parámetro.

tryUn intento. Se utiliza para manejar errores durante la ejecucción. Por ejemplo si intentas escribir en un archivo sin permisos, si no manejas el error, el programa seguirá intentando trabajar con un archivo al que no tiene acceso o se cerrará directamente el programa de forma inesperada. Con try, en el caso de un error/excepción puedes manejar los errores del bloque con expect. Por ejemplo podrías sacarle un texto al usuario diciendo: No tienes permisos para escribir en el archivo. Correr el programa como root?
 
check contenedor al que se le asigna el resultado de la expresión a la derecha del operador de asignación.

os.listdir(ruta)retorna una lista con los archivos y directorios visibles.

os.sep.joinretorna la concatenación de los parámetros.

os.environ.get("SystemRoot"Obtiene el valor de la variable SystemRoot (la ruta) del entorno de ejecución.

 r'C:\windows' la r indica que es un string raw. Es decir, que la barra \ sea parte de los caracteres y no sea usada como un caracter/operador para escape los caracteres. Por ejemplo \n es un salto de linea. Si tratases de usar la ruta "D:\new" como ves, estarías llamando al caracter \n para saltar la linea. Con r" o r' se indica que no haga esto, que el caracter \ forma parte del string o la ruta.

Por defecto get obtiene el valor de la variable SystemRoot y en caso de que no se encuentre retorna C:\Windows

Con join se añade temp a la ruta.

Si no se puede listar el directorio es probable que no tengas permisos de lectura y por lo tanto no seas Root.

El except en este código es bastante cutre, porque no comprueba que el error sea causado por culpa de no tener permisos o no ser root. Podrías tener permisos y no ser esa la causa del error. Si no utilizases try y except para manejar los errores, se te cerraría el programa de forma inesperada.

Después guarda un string en el objeto admin que pertenece a self, indicando si se pudo listar el directorio o si no.

Se usa join en vez de path porque path maneja y ordena las rutas según ciertos criterios, mientras que join hace exactamente lo que le indicas.

Utiliza la etiquetas Geshi