El lun., 24 sept. 2018 a las 16:30, Miguel de Dios Matias (<
tres.14...@gmail.com>) escribió:

> Buenas.
>
> Ando pegándome en intentar "encapsular" un ejecutable (un viejo roguelike)
> que saca la salida en ncurses y se interacciona con pulsaciones de teclado.
>
> Me he hecho un script sencillo en ncurses para probar (este espera la
> pulsación y muestra la tecla pulsada y si es q se sale).
>

¿Exactamente, qué esperabas que hiciera? Las entradas y salidas estándar
funcionan con buffers, no son adecuadas para programas interactivos.

De alguna forma tendrás que exponer el interface curses de la aplicación
para que sea accesible por tu script de testing.


>
> ----
> import sys,os
> import curses
>
> def draw_menu(stdscr):
>    k = 0
>    while (k != ord('q')):
>       stdscr.clear()
>       height, width = stdscr.getmaxyx()
>       stdscr.addstr(0, 0, "HOLA {}".format(k))
>       stdscr.refresh()
>
>       k = stdscr.getch()
>
> def main():
>    curses.wrapper(draw_menu)
>
> if __name__ == "__main__":
>    main()
> ----
>
> Y he probado con popen, pexpect y me falta sacrificar una cabra...no lo
> saco, aquí mis intentos infructuosos:
>
> ----
>
> """
> ps -A | grep cata
> xdotool search --pid 3819
> xdotool key --window 50331670 q
> """
>
> """
> from subprocess import Popen, PIPE
>
> #p = Popen('./test5.py', stdin=PIPE, stdout=PIPE, shell=True)
> #p = Popen('./test5.py', shell=True)
> p = Popen('./test2.py')
>
> print(p.pid)
>
> sleep(100)
>
> # p.stdin.close()
> # p.stdout.close()
> # p.wait()
>
> """
>
>
> # ~ import pexpect
>
> # ~ child = pexpect.spawn("./test5.py")
> # ~ child.send('a')
> # ~ child.send('b')
> # ~ child.interact()
>
>
> # ~ import sys
> # ~ import pexpect
> # ~ child = pexpect.spawn('./test5.py', logfile=open("/tmp/file", "wb"))
> # ~ child.logfile = open("/tmp/file", "wb")
> # ~ child.expect(pexpect.EOF)
> # ~ child.send('a')
> # ~ child.send('q')
> # ~ child.interact()
>
> """
>
> https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux
> spawn
> fout = file('output.txt', 'w') child.logfile = fout
> """
>
> import sys
> from time import sleep
> import pexpect
> child = pexpect.spawn('./test5.py')
> child.logfile = open("/tmp/file", "wb")
> sleep(2)
> child.send('a')
> print(child.read())
> # ~ child.send('q')
> ----
>
> Por si alguien le interesa el karma en stackoverflow, tengo la misma
> pregunta por allí, si contesta le voto positivo:
>
>
> https://stackoverflow.com/questions/52377179/open-a-process-and-catch-stdout-and-send-custom-keypress
>
> Y también por si alguno le ha picado la curiosidad tengo también un
> mensaje en el foro de referencia de videojuegos libres:
>
>
> https://forum.freegamedev.net/viewtopic.php?f=3&t=8113&sid=47af7f6dfc9848160f9ca27791a045f1
>
> Saludos.
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a