等待在python中输入时打印到控制台

问题描述 投票:3回答:1

我有一个python脚本(用作命令行界面),等待使用input函数的输入查询。

while True:
  query = input('Enter query: ')
  thread = Thread(target=exec_query, args=(query,))
  thread.start()

同时,辅助线程正在执行此类查询。使用print函数将查询的输出打印到命令行。

def exec_query(query_data):
  # doing a complex data processing ...
  print('results of the query')

因此,打印功能的输出写在主线程中第二次执行打印功能所打印的前缀'Enter query: '的后面:

Enter query: {the query}
Enter query: results of the query

我想实现将打印功能的输出插入到前缀'Enter query: '之前(或者看起来是这样):

Enter query: {the query}
results of the query
Enter query:

我已经通过几种方法,但是没有找到一个好的解决方案。一种workaround是通过添加'\x1b[1A\x1b[2K'来删除前缀,并在打印查询执行的输出后将其写回。这里的问题是,我不知道如何重建此时用户可能已经插入的不完整的用户输入(查询)。

python command-line-interface
1个回答
1
投票

使用此Read 1 char from terminal

  • 返回字节
    • 通过str获得bytes.decode()
  • 不回显(键入不可见)
    • 代替msvcrt.getch.getche内使用_GetchWindows.__call__
  • msvcrt未全局导入

做类似的事情

while input != '\r': # or some other return char, depends
    input += getch().decode()

# in front of erase
while msvcrt.kbhit(): # read while there is something to read
    remember_input += getch().decode()
print(erase)
# and than you should return remember_input to stdin somehow (try msvcrt.putch)

由于复杂性(使用线程编写(我是新手),输入/输出控制(因为我的vsc终端每次讨厌我),以及可能还有更多原因,我自己都没有这样做想累了),但我确定你不会退出

编辑:哦,是的我忘了提您可能也想写自己的printinput,在这种情况下,有用的东西将是input(prompt, remember_string)提示将无法通过退格键删除,并且记住字符串将

© www.soinside.com 2019 - 2024. All rights reserved.