Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Limpiar el terminal, funciona en linux pero no en windows.
#1
Hola gente, ¿cómo están?
Cómo es mi primer post les cuento un poco de mí, tengo 65 años y como comprenderán ya no concurro a la universidad
soy un autodidacta con mucho tiempo para dedicarle a python, estaba estudiando c pero terminé un tanto frustrado
ya que me pareció muy difícil de aprender y como python es muy amigable aquí estoy.-
Les dejo el programita para que me digan si hay alguna solución, en linux funciona pero en windows 7 no limpia el terminal.


Código:
import os

def limpiar():
  input("\n Pulse una tecla para continuar...")
  if os.name == "posix":
     os.system ("clear")
  elif os.name == ("ce", "nt", "dos"):
     os.system ("cls")

while True:
  a=int(input("\n Ingrese un número mayor a cero...:"))
  if a == 0:
     break
  else:
     limpiar()

Saludos.
Daniel
Responder
#2
Hola Daniel, ¿cómo estás?

Los comandos de tu función son correctos. El problema radica en la segunda comparación; os.name nunca será una tupla y por esta razón os.system("cls") no llega a ejecutarse. En su lugar, probablemente lo que quieras determinar es si os.name es igual a alguno de los elementos de esa tupla, más que a la tupla en sí misma. Para ello puedes usar el operador in:

  1. def limpiar():
  2.  input("\n Pulse una tecla para continuar...")
  3.  if os.name == "posix":
  4.     os.system ("clear")
  5.  elif os.name in ("ce", "nt", "dos"):
  6.     os.system ("cls")


No obstante creo que sería suficiente utilizando os.name == "nt" (dudo que "dos" o "ce" sean valores retornados por alguna versión desde Windows 95).

Saludos!
Responder
#3
Hola Francisco. Muchas gracias por tu tiempo, funciona a la perfección.-

Cita:......nunca será una tupla y por esta razón os.system("cls") no llega a ejecutarse.

Voy a leer en la página con la cual estoy estudiando para ver si me explico esta parte, no la entiendo del todo.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Daniel, veámoslo de esta forma.

  1. >>> import os
  2. >>> os.name
  3. 'nt'


Esto es lo que ocurre cuando ejecutamos el código desde la consola interactiva en Windows. La otra opción es que en lugar de 'nt' veamos 'posix' en distribuciones de Linux (tal vez aun 'os2' en Mac OS). Lo que es común a las alternativas es que todas son cadenas.

  1. >>> type(os.name)
  2. <type 'str'>


Ahora bien, en tu código original estabas comparando una cadena (os.name) con una tupla.

  1. >>> os.name == ("ce", "nt", "dos")
  2. False


Como se trata de tipos diferentes, por definición esa comparación es siempre falsa. La única forma en que sea verdadera es que os.name sea una tupla con esos tres elementos, lo que es imposible pues dijimos que siempre es una cadena.

Como te comentaba anteriormente, lo que quieres hacer es determinar si os.name es igual a "ce", o bien a "nt", o bien a "dos". Eso puedes lograrlo utilizando el operador or:

  1. >>> os.name == "ce" or os.name == "nt" or os.name == "dos"
  2. True


La otra propuesta es utilizar el operador in, que retorna True cuando el valor de la izquierda es igual a alguno de los elementos dentro de la colección a la derecha (podría ser una tupla, un diccionario, una lista o cualquier otra colección).

  1. >>> # ¿Está os.name dentro de ("ce", "nt", "dos")?
  2. ... os.name in ("ce", "nt", "dos")
  3. True


Espero haber clarificado las cosas.

Saludos!
Responder
#5
Hola Francisco que tengas un muy buen día.-
Gracias por la explicación, ahora me queda claro.-

Saludos, hasta la próxima.-
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)