[Python] Mi consola no muestra nada...

Iniciado por BigByte, 20 Diciembre 2014, 23:37 PM

0 Miembros y 1 Visitante están viendo este tema.

BigByte

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 (python) [Seleccionar]
import os

def information_extract():
comando = "systeminfo"
abrir = os.popen(comando)
datos = "tubo.readlines()"
nombre_pc = datos [1].split(" ")[-1].split("\n")[0]
nombre_fichero = "informacion: "+nombre_pc+".txt"
fichero = open(nombre_fichero, "W")
fichero.writelines(datos)
fichero.close()
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
¿Eres de Zaragoza y necesitas Ordenador? ¿El que tienes te va lento? ¿Has tenido infección de malware? ¡¡No te preocupes, yo te lo arreglo!!
(Zaragoza, España)

http://www.bigbyte.webnode.es

BigBear

nunca estas llamando a la funcion information_extract() , te deberia quedar asi :

Código (python) [Seleccionar]
def information_extract():
comando = "systeminfo"
abrir = os.popen(comando)
datos = "tubo.readlines()"
nombre_pc = datos [1].split(" ")[-1].split("\n")[0]
nombre_fichero = "informacion: "+nombre_pc+".txt"
fichero = open(nombre_fichero, "W")
fichero.writelines(datos)
fichero.close()
return nombre_fichero

information_extract()




Eleкtro

#2
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#.
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'W'


Corrección:
Código (python) [Seleccionar]
from subprocess import Popen, PIPE, STDOUT

def ExtractSystemInfo():
outStr    = Popen('systeminfo', shell=True, stdout=PIPE, stderr=STDOUT).stdout.read()
outList   = outStr.splitlines(False)
pcName    = outList[1].split(' ')[-1].split('\n')[0]
filename  = "C:\\Info {0}.txt".format(pcName)
with open(filename, "w") as fileStream:
fileStream.writelines(outStr)
return filename

filename = ExtractSystemInfo()
print filename


Saludos








BigByte

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
¿Eres de Zaragoza y necesitas Ordenador? ¿El que tienes te va lento? ¿Has tenido infección de malware? ¡¡No te preocupes, yo te lo arreglo!!
(Zaragoza, España)

http://www.bigbyte.webnode.es

Eleкtro

#4
Cita de: BigByte en 21 Diciembre 2014, 16:07 PMcomo 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!