[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