我当前正在使用多处理,因此我可以在运行其他代码时获得用户输入。此版本的代码对我来说在ubuntu 19.04上运行,但是对我的朋友而言,它在Windows上不起作用。
import getch
import time
from multiprocessing import Process, Queue
prev_user_input = ' '
user_input = ' '
# Getting input from the user
queue = Queue(1)
def get_input():
char = ' '
while char != 'x':
char = getch.getch()
queue.put(char)
# Starting the process that gets user input
proc = Process(target=get_input)
proc.start()
while True:
# Getting the users last input
while not queue.empty():
user_input = queue.get()
# Only print user_input if it changes
if prev_user_input != user_input:
print(user_input)
prev_user_input = user_input
time.sleep(1/10)
如何使此代码在Windows上工作?
用户输入也落后一个输入。如果用户按下按钮,则仅在按下另一个按钮后才打印。有关如何解决此问题的解决方案也将有所帮助。
编辑1:他正在使用Python 3.7.4,而我正在使用3.7.3。
我按照建议尝试了此代码
import msvcrt
import time
from multiprocessing import Process, Queue
prev_user_input = ' '
user_input = ' '
# Getting input from the user
queue = Queue(1)
def get_input():
char = ' '
while char != 'x':
char = msvcrt.getch()
queue.put(char)
# Starting the process that gets user input
if __name__ == '__main__':
proc = Process(target=get_input)
proc.start()
while True:
# Getting the users last input
while not queue.empty():
user_input = queue.get()
# Only print user_input if it changes
if prev_user_input != user_input:
print(user_input)
prev_user_input = user_input
time.sleep(1/10)
但是没有字符被打印。
以下内容适用于Windows。它包含了我在您的问题下的评论中建议的所有更改,包括最后一个有关单独的内存空间的更改。
使用ubuntu的版本,类似的东西也应该可以在ubuntu下工作getch(),尽管我尚未对其进行测试。on主进程创建Queue并将其作为参数传递给get_input()目标函数,因此它们都使用同一对象交换数据。
我还返回了将其转换为(1个字符)Unicode UTF-8字符串decode()的bytes对象msvcrt.getch()。
import msvcrt
import time
from multiprocessing import Process, Queue
prev_user_input = ' '
user_input = ' '
def get_input(queue):
char = ' '
while char != b'x':
char = msvcrt.getch()
queue.put(char.decode()) # Convert to utf-8 string.
if __name__ == '__main__':
# Getting input from the user.
queue = Queue(1)
# Starting the process that gets user input.
proc = Process(target=get_input, args=(queue,))
proc.start()
while True:
# Getting the users last input
while not queue.empty():
user_input = queue.get()
# Only print user_input if it changes
if prev_user_input != user_input:
print(user_input)
prev_user_input = user_input
time.sleep(1/10)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。