2017-05-04 2 views
0

drucken Ich habe den folgenden Code, der mir Druck und erhält Tastatureingabe zur gleichen Zeit läßt:Python Eingabe gelöscht werden, wenn ein anderer Thread Anrufe

import time 
from threading import Thread 

def InpThread(): 
    while True: 
     response = input("Type in here\r\n") 
     print("Response is " + response) 

tinp = Thread(target=InpThread) 
tinp.start() 

while True: 
    time.sleep(1) 
    print("Printing") 

ich dies zu einem einfachen Fall abgestreift habe nach unten, meinem Fall hat andere Sachen, aber das Problem ist für mich mit diesem Beispiel reproduzierbar. Letzte Woche hatte ich keine Probleme mit der Rückgabe von input() und gab mir alle bis dahin eingegebenen Zeichen. Nun, es scheint, jeder Aufruf von print() in dem anderen Thread löscht alle Zeichen weg, so dass ich meistens mit einer leeren Eingabe übrig bleibe, es sei denn ich zeitlich richtig und bin sehr schnell.

Printing 
aPrinting 
b 
Response is b 
Type in here 
Printing 

Ich benutze Python-Interpreter 3.5.2.

Ich kann keine Änderung in meinem Code in der letzten Woche sehen, alles, was ich denken kann, ist, dass Windows aktualisiert hat, oder vielleicht das Python-Modul.

Wie kann ich alle Eingaben behalten und nicht durch einen Aufruf zum Drucken gelöscht werden()?

+0

redest du über den Druck 'Drucken'? Denn ohne die letzte while-Schleife scheint der Code gut zu funktionieren! –

+0

Wo es heißt "Antwort ist b" sollte es sagen "Antwort ist ab", weil ich sowohl a und b gedrückt habe, aber a wurde durch den Druck gelöscht. Ich habe jetzt erkannt, dass es erwähnenswert ist, dass ich dies von PyCharm aus führe, und ein separates Konsolenfenster scheint vielleicht zu anderen Ergebnissen zu führen. –

+0

Ich habe jetzt festgestellt, dass es definitiv etwas mit der PyCharm-Konsole zu tun hat. –

Antwort

0

Sie sollten wahrscheinlich lock für die Druckfunktion verwenden.

Überprüfen Sie This answer. Es erstellt ein Sperrobjekt und verwendet es später zum Drucken.

Verwandte Themen