Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Eleкtro en 9 Febrero 2012, 15:32 pm



Título: (solucionado) [python] limpiar la pantalla
Publicado por: Eleкtro en 9 Febrero 2012, 15:32 pm
¿Que estoy haciendo mal?

Código
  1. #!usr/bin/python
  2.  
  3. import os
  4.  
  5. print " Test "
  6.  
  7. os.system.cls


Título: Re: [python] limpiar la pantalla
Publicado por: Jirp96 en 9 Febrero 2012, 16:21 pm
Hola!
Pues lo que estas haciendo mal, es llamar a la funcion system.
Estas llamandola así:
Código
  1. os.system.cls

Cuando la llamas asi, estas llamando al atributo "cls", dentro del objeto system, dentro del módulo os. De hecho, para python lo que haces esta "bien"(por ej, asi puedes ver los atributos de las clases), pero, al no existir "cls" dentro de system, da error.

Mira esto:
Código
  1. >>> import os
  2. >>> help(os.system)
  3. Help on built-in function system in module nt:
  4.  
  5. system(...)
  6.    system(command) -> exit_status
  7.  
  8.    Execute the command (a string) in a subshell.
  9.  
  10. >>> os.system("cls")
  11. 0
  12. >>> #como ves, no muestra el resultado de "cls", solo el "exit_status"(0)*
  13.  

Entonces, debes llamar a la funcion system así: os.system(comando_a_ejecutar)
*comando_a_ejecutar tiene que ser una cadena, como "cls"(con las comillas).

Espero haberte ayudado.
Saludos!
EDITO: *Si lo ejecuto desde IDLE, no muestra el resultado de cls ni ningun otro comando, peero, si ejecutas python desde la consola funciona sin problemas  :o


Título: Re: [python] limpiar la pantalla
Publicado por: Eleкtro en 9 Febrero 2012, 16:36 pm
perfecto gracias

He visto ejemplos y me he dado cuenta que también funciona así los atributos, con una comilla:

Código
  1. os.system('cls')

No se si la diferencia de usar 1 comilla o comillas dobles puede afectar mucho xD

Solucionado.


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: Jirp96 en 9 Febrero 2012, 16:45 pm
Hola!
Segun se, no tiene ninguna diferencia usar comillas simples o dobles, lo que si, te permiten escribir cosas así:

Código
  1. >>> print "hola \"mundo\""
  2. hola "mundo"
  3. >>> print 'hola \'mundo\''
  4. hola 'mundo'
  5. >>>

de esta forma:

Código
  1. >>> print "hola 'mundo'"
  2. hola 'mundo'
  3. >>> print 'hola "mundo"'
  4. hola "mundo"
  5. >>>

La segunda forma(alternando las comillas) queda mas facil de leer.
Es la unica diferencia que se me ocurre. :xD
Saludos!


Título: Re: [python] limpiar la pantalla
Publicado por: WaAYa HaCK en 9 Febrero 2012, 16:47 pm
Eso es porque en IDLE, los comandos del sistema que devuelven salida no la vuelcan en la GUI, sólo comprueban el estado de salida (bien o mal).

Por ejemplo:
Código
  1. import os
  2. os.system("dir") # devuelve 0
  3. os.system("dir & pause") # abre un CMD con un dir, y después devuelve 0
Esto hablando desde IDLE.

Lo que hago arriba no es muy correcto: si quieres mostrar un listado de archivos, la función os.listdir("R:/uta/al/directorio/") devuelve una lista con los archivos y directorios. En Python, aunque uses Windows, los slash deben ir así /.


Y lo de las comillas:
Código
  1. "Hola'fsgefgh'sfvgerdfgte'a"
  2. 'hola"fsbhdehet"egrghre"a'

Saludos!


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: RyogiShiki en 9 Febrero 2012, 16:49 pm
perfecto gracias

He visto ejemplos y me he dado cuenta que también funciona así los atributos, con una comilla:

Código
  1. os.system('cls')

No se si la diferencia de usar 1 comilla o comillas dobles puede afectar mucho xD

Solucionado.

Advertencia - mientras estabas escribiendo, fueron publicadas 2 respuestas. Probablemente desees revisar tu mensaje.

Sobre las comillas: http://elclubdelautodidacta.es/wp/2011/10/python-capitulo-22-comillas-simples-dobles-y-triples/

Código
  1. os.system('cls')
esa manera de hacerlo es dependiente de la plataforma y va a tirar al suelo la portabilidad de la que se hace gala en Python, además de ser una llamada costosa de realizar. Una forma de hacerlo es haciendo un bucle que inserte retornos de carro en el bufer de entrada para "simular" una limpieza de pantalla.

Saludos


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: WaAYa HaCK en 9 Febrero 2012, 16:50 pm
Yo estaba haciendo un script para pasar archivos por internet y usaba argumentos. Cuando arrastras un archivo a la consola de Python, se coloca con comillas dobles por defecto: debes prever esto si vas a usar el sys.


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: Jirp96 en 9 Febrero 2012, 16:56 pm
Hola!
@WaAYa HaCK: Sobre los slash, en windows tambien podes escaparlos con otro slash y(al menos a mi) funcionan sin problemas(aunque queda mucho mas legible usar "/" :xD)

Código
  1. >>> os.listdir("C:\\")
  2.  
  3. >>> os.listdir("C:/")


Saludos!


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: WaAYa HaCK en 9 Febrero 2012, 16:57 pm
Ya, pero yo me he acostumbrado así y mira...  :rolleyes:


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: Eleкtro en 9 Febrero 2012, 17:33 pm
Código
  1. os.system('cls')
esa manera de hacerlo es dependiente de la plataforma y va a tirar al suelo la portabilidad de la que se hace gala en Python, además de ser una llamada costosa de realizar. Una forma de hacerlo es haciendo un bucle que inserte retornos de carro en el bufer de entrada para "simular" una limpieza de pantalla.

O esto:

Código
  1. print "\n " +500

No funciona xD, aún no se la sintaxis bien pero el code era algo parecido y escribía 500 líneas sin contenido, supongo que ya sabrán de que hablo xD

Aunque prefiero usar CLS de momento

saludos


Título: Re: (solucionado) [python] limpiar la pantalla
Publicado por: WaAYa HaCK en 9 Febrero 2012, 20:16 pm
Puedes hacer un bucle while:
Código
  1. contador = 0
  2. while contador < 500:
  3.   print '\n'
  4.   contador += 1
  5.  

Esto iría añadiendo 1 al valor de contador y mostrando una línea en blanco. Cuando contador llegara a 500, se rompe el bucle.