2016-01-01 4 views
0

J'ai créé un script Python qui peut prendre des commandes depuis un tube (nommé pipe1). Vous pouvez trouver le script sur Pastebin.
J'ai testé le script avec cet autre scénario:Comment puis-je contrôler un script Python en continu avec des entrées clés?

import sys 

fw = open("pipe1", "w") 

fw.write('fd\n') 
fw.close() 

et cela a fonctionné.

Maintenant, je veux contrôler le script avec un autre script Python, qui pourrait écrire dans le tuyau si je presse w, a, s, d ou p et me afficher les touches, que je presse.

Dans cet exemple, je veux juste imprimer les touches sur lesquelles j'appuie. Je plus tard ajouter les fw.write commandes à écrire dans la conduite, que je testé avant:

def key_inp(event): 
    print 'Key:', event.char 
    key_press = event.char 
    sleep_time = 0.030 

while True: 
    try: 
     if key_press.lower() == 'w': 
      print "w" 
     elif key_press.lower() == 's': 
      print "s" 
     elif key_press.lower() == 'a': 
      print "a" 
     elif key_press.lower() == 'd': 
      print "d" 
     elif key_press.lower() == 'q': 
      print "q" 
     elif key_press.lower() == 'e': 
      print "e" 
     elif key_press.lower() == 'p': 
      print "stop" 

    except(KeyboardInterrupt): 
     print('Finished') 

Mon problème est que le script que je l'ai écrit (et amélioré avec un membre stackoverflow) ferme immédiatement quand je l'ouvre. Est-ce que quelqu'un peut m'expliquer pourquoi, et comment je peux le réparer afin que le script reste ouvert tout le temps jusqu'à ce que je l'interrompe avec Ctrl + c?

+0

Où 'key_press' vient .. Est-ce la même chose dans la boucle' while' et la fonction dans 'key_inp'? –

+0

L'exemple de code que vous fournissez comporte une variable locale inutilisée et plus tard une variable locale non affectée. Pourriez-vous éditer avec l'exemple de script que vous essayez d'utiliser? – Uvar

Répondre

1

EDIT: Cette réponse repose sur l'installation du module readchar. Vous pouvez l'installer via pip: pip install readchar.

Le code que vous essayez d'utiliser n'a aucune fonctionnalité: vous ne définissez qu'une fonction, mais ne l'appelez jamais. En plus de cela, il contient des erreurs d'indentation.

Quelque chose le long des lignes de ce que vous essayez d'atteindre, mais avec un point comme la clé d'arrivée:

import readchar 

while True: 
    key = readchar.readkey() 
    key = key.lower() 
    if key in ('wsadqe'): 
     print 'Key:', key 
    elif key == 'p': 
     print "stop" 

    sleep_time = 0.030 

    if key == '.': 
     print "finished" 
     break