[Python-es] Editar variables en aplicaciones de consola
Chema Cortes
pych3m4 en gmail.com
Lun Ago 18 15:02:53 CEST 2014
El 18 de agosto de 2014, 1:08, kausdiv <kausdiv en gmail.com> escribió:
> Magistral, Chema.
> Mucho mejor que lo que yo usaba.
>
> Por cierto como haces tu para editar en aplicaciones de consola ?
>
No suelo necesitarlo, pero dejaría que las tareas de edición las hagan los
editores (vim/emacs/nano...notepad...st2). Crea un fichero temporal, añade
el texto, y ábrelo con el editor por defecto que tenga el sistema:
import os
import subprocess
import tempfile
def editar(texto):
with tempfile.NamedTemporaryFile(mode="w+",suffix='.txt',delete=False)
as fp:
fp.write(texto)
filename = fp.name
if os.name=="nt":
subprocess.call("notepad "+filename)
elif os.name == "posix":
editor = os.getenv('EDITOR')
if not editor:
editor = "editor" # normalmente un alias del editor 'nano'
subprocess.call(editor + ' ' + filename)
with open(filename) as fp:
res = fp.read()
os.remove(filename)
return res
texto = editar("Hello world!")
print(texto)
>
> saludos.
>
> El 18/08/2014 0:16, Chema Cortes escribió:
>
>
>
>
> El 17 de agosto de 2014, 19:45, kausdiv <kausdiv en gmail.com> escribió:
>
>> Hola.
>>
>> Estoy haciendo varias aplicaciones/utilidades de consola que necesito.
>> La cuestión es que no conozco ninguna forma de "editar" una variable, con
>> raw_input se introduce nueva.. en fin he recurrido a Tkinter.
>>
>> Pero me parece una tremenda chapuza lo que he hecho:
>> ------------------codigo chapuza------------------
>> from Tkinter import *
>>
>> global T
>> global sArgumentos
>>
>> root = Tk()
>> T = Text(root, height=4, width=60)
>> T.pack()
>> sArgumentos = ""
>>
>> def click():
>> """Debe lanzarse en el click de Aceptar"""
>> global T
>> global sArgumentos
>> sArgumentos = T.get('1.0', 'end').strip()
>> root.destroy()
>>
>> def editar(argumentos):
>> """Edita los argumentos y el resultado
>> lo guarda en la varibale global sArgumentos """
>> global T
>> T.insert(END, argumentos)
>> b = Button(root, text="Aceptar", command=click)
>> b.pack(fill=BOTH, expand=1)
>> b = Button(root, text="Cancelar", command=root.destroy)
>> b.pack(fill=BOTH, expand=1)
>> mainloop()
>> --------------------------------------------------------------------
>>
>> En la aplicación se invoca a "editar('valor a editar')" y en la variable
>> global sArgumentos se almacena la edición. Que además es la variable que
>> contiene el origen.
>>
>> Me gustaría saber si alguien ha resuelto este problema de editar el
>> contenido de variables mejor que esto.
>>
>
> Para empezar: los objetos "string" son "inmutables". No puedes
> "editarlos". Como mucho podrás crear nuevas cadenas a partir de otras.
>
> Si lo que quieres es un interface en Tkinter, lo recomendable es usar
> las StringVars. Lee la documentación porque tienen tienen muchas
> características interesantes. Aquí sólo te pongo un código para que te
> oriente:
>
> import Tkinter as tk
>
> master = tk.Tk()
>
> v = tk.StringVar()
> v.set("A variable text")
>
> e = tk.Entry(master, textvariable=v)
> e.pack()
>
> b = tk.Button(master, text="get", width=10, command=master.quit)
> b.pack()
>
> tk.mainloop()
>
> edited_text = v.get()
> print(edited_text)
>
>
>
>>
>> Gracias.
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
>
> --
> Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
> Buscador Python Hispano: http://ch3m4.org/python-es
>
>
> _______________________________________________
> Python-es mailing listPython-es en python.orghttps://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
--
Hyperreals *R "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140818/27021004/attachment.html>
Más información sobre la lista de distribución Python-es