Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: BigByte en 20 Diciembre 2014, 23:37 pm



Título: [Python] Mi consola no muestra nada...
Publicado por: BigByte en 20 Diciembre 2014, 23:37 pm
Hola, buenas noches.

recien me he iniciado con la programacion en pyhton. Me decidi por hacer un script que recogiera informacion de un pc con el comando systeminfo

lo que deberia hacer basicamente es ejecutar systeminfo, crear un .txt, escribir los valores de systeminfo en el, alinear los datos y guardar el txt.

el problema es que al ejecutarlo no marca ningun error, se queda pensando un momento y la terminal me muestra una linea nueva en plan:
C:\Users\mi_user\Desktop>script.py
"aqui no ejecuta ni se ve nada"
C:\Users\mi_user\Desktop

deberia crear un archivo en el escritorio pero nada...
el codigo es este

Código
  1. import os
  2.  
  3. def information_extract():
  4. comando = "systeminfo"
  5. abrir = os.popen(comando)
  6. datos = "tubo.readlines()"
  7. nombre_pc = datos [1].split(" ")[-1].split("\n")[0]
  8. nombre_fichero = "informacion: "+nombre_pc+".txt"
  9. fichero = open(nombre_fichero, "W")
  10. fichero.writelines(datos)
  11. fichero.close()
  12. return nombre_fichero

sera algun error tonto, pero llevo toda la tarde con el.. ¿alguien me hecha una mano?

PD la version de python es la 2.7

saludos


Título: Re: [Python] Mi consola no muestra nada...
Publicado por: BigBear en 21 Diciembre 2014, 00:57 am
nunca estas llamando a la funcion information_extract() , te deberia quedar asi :

Código
  1. def information_extract():
  2. comando = "systeminfo"
  3. abrir = os.popen(comando)
  4. datos = "tubo.readlines()"
  5. nombre_pc = datos [1].split(" ")[-1].split("\n")[0]
  6. nombre_fichero = "informacion: "+nombre_pc+".txt"
  7. fichero = open(nombre_fichero, "W")
  8. fichero.writelines(datos)
  9. fichero.close()
  10. return nombre_fichero
  11.  
  12. information_extract()




Título: Re: [Python] Mi consola no muestra nada...
Publicado por: Eleкtro en 21 Diciembre 2014, 01:02 am
Hola

No es solo un fallo tonto, hay varios fallos graves en el script que imposibilitan su ejecución.

1) Has escrito una función, pero no llamas nunca a dicha función, el intérprete no va a procesar las instrucciones del bloque de la función por si solo sin que tu se lo indiques, estariamos apañaos xD.
Viendo ese fallo te recomiendo leer un tutorial básico de programación para comprender que es un método, una función (es un método que devuelve un valor), y como se pueden utilizar.

2) El nombre de un archivo en Windows no puede contener el caracter ":", es un caracter ilegal.

3) Al utilizar comillas o comillas dobles estás asignando un string, no el resultado de una función. ( var = "tubo.readlines()" )

4) Continuación del punto 3, de todas formas no existe ningún objeto llamado "tubo".

5) Deberías usar el método Popen del módulo subprocess, ya que se considera más seguro.

6) Dado que estás partiendo el string usando la función .readlines(), al intentar obtener el nombre del pc estás obteniendo una linea que contiene un breakline, es decir, un string multilinea, por lo tanto no puedes luego intentar adjuntarla en el nombre un archivo, ya que un nombre de archivo no puede contener un breakline.

7) Al abrir el Stream y especificar los permisos de lectura/ecritura con el método Open, estás escribiendo "W" para el permiso de escritura (Write), pero lo estás especificando en mayúsculas, y eso no está permitido, es "w", en minúsculas, de lo contrario dará un error. el StringCase es muy importante en un lenguaje tan restrictivo como es Python... o C#.
Código:
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'W'


Corrección:
Código
  1. from subprocess import Popen, PIPE, STDOUT
  2.  
  3. def ExtractSystemInfo():
  4. outStr    = Popen('systeminfo', shell=True, stdout=PIPE, stderr=STDOUT).stdout.read()
  5. outList   = outStr.splitlines(False)
  6. pcName    = outList[1].split(' ')[-1].split('\n')[0]
  7. filename  = "C:\\Info {0}.txt".format(pcName)
  8. with open(filename, "w") as fileStream:
  9. fileStream.writelines(outStr)
  10. return filename
  11.  
  12. filename = ExtractSystemInfo()
  13. print filename

Saludos


Título: Re: [Python] Mi consola no muestra nada...
Publicado por: BigByte en 21 Diciembre 2014, 16:07 pm
Hola Elektro!

lo primero gracias por la respuesta y explicacion magistral. está claro que me queda todavia un tocho para saber hacer algo que creia sencillo. ;)

sin embargo, aunque el script se ejecute correctamente, al final da error de acceso denegado al escribir. (IOError: [Errno 13] Permission denied 'C:\\Info Nombre_PC.txt')

¿como se podria subsanar esto para que deje escribir el .txt?

gracias


Título: Re: [Python] Mi consola no muestra nada...
Publicado por: Eleкtro en 21 Diciembre 2014, 22:33 pm
como se podria subsanar esto para que deje escribir el .txt?

Es un problema de permisos de la cuenta de usuario.

Prueba a ejecutar el script como Administrador, desactivar UAC, o crear el archivo en otra carpeta donde tengas permisos de escritura.

Saludos!