避免来自 Python 标准输入流的控制序列(如 ^[[C)
Avoid control sequences(like ^[[C) from Python standard inputstream
代码:
s = input("Enter a String : \n")
print("The Entered String is : " + s)
print("The Length of Entered String is : " + str(len(s)))
输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python try.py
Enter a String :
hello
The Entered String is : hello
The Length of Entered String is : 5
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python try.py
Enter a String :
hello^[[D
The Entered String is : hello
The Length of Entered String is : 8
当我按下箭头键时 ^[[C 出现而不是光标移动(类似的事情发生在其他箭头键、转义键、home、end 上)!
这里发生的是字符串第二次包含字符 :
['h', 'e', 'l', 'l', 'o', '\x1b', '[', 'C']
所以,'\x1b', '[', 'C' 是从键盘发送到 shell 的字符序列,代表右箭头键(光标向前)。
我想要的是这些字符不会出现在 shell 中,但光标会移动(根据按下的键向前、向后、回到原点、结束等)。
接受输入后的处理意义不大,主要目的是让光标移动!
我怎样才能在 Python 中实现这一点?
异常
但是如果我们直接使用 python 解释器就可以了:
这是终端输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = input("Enter a String : \n")
Enter a String :
hello
>>> print("The Entered String is : " + s)
The Entered String is : hello
>>> print("The Length of Entered String is : " + str(len(s)))
The Length of Entered String is : 5
>>> s = input("Enter a String : \n")
Enter a String :
hello
>>> print("The Entered String is : " + s)
The Entered String is : hello
>>> print("The Length of Entered String is : " + str(len(s)))
The Length of Entered String is : 5
这里尽管按方向键或退出或回家输出是相同的。
[编辑]
唯一的目标是在使用该程序时为用户提供类似终端的体验。
input
的文档提到了以下内容:
If the readline module was loaded, then input() will use it to provide elaborate line editing and history features.
因此,我们获取您的程序,并添加一个 import readline
,现在我们从中获取游标处理和其他项目:
import readline
s = None
while s != 'exit':
s = input("Enter a String : \n")
print("The Entered String is : '{}'".format(s))
print("The Length of Entered String is : {}".format(len(s)))
在这种情况下,我可以做一个 运行:
Enter a String :
hello world
The Entered String is : 'hello world'
The Length of Entered String is : 11
Enter a String :
hello world
The Entered String is : 'hello world'
The Length of Entered String is : 13
Enter a String :
exit
The Entered String is : 'exit'
The Length of Entered String is : 4
我能够使用向上箭头返回并编辑之前的输入。
代码:
s = input("Enter a String : \n")
print("The Entered String is : " + s)
print("The Length of Entered String is : " + str(len(s)))
输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python try.py
Enter a String :
hello
The Entered String is : hello
The Length of Entered String is : 5
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python try.py
Enter a String :
hello^[[D
The Entered String is : hello
The Length of Entered String is : 8
当我按下箭头键时 ^[[C 出现而不是光标移动(类似的事情发生在其他箭头键、转义键、home、end 上)!
这里发生的是字符串第二次包含字符 :
['h', 'e', 'l', 'l', 'o', '\x1b', '[', 'C']
所以,'\x1b', '[', 'C' 是从键盘发送到 shell 的字符序列,代表右箭头键(光标向前)。
我想要的是这些字符不会出现在 shell 中,但光标会移动(根据按下的键向前、向后、回到原点、结束等)。
接受输入后的处理意义不大,主要目的是让光标移动!
我怎样才能在 Python 中实现这一点?
异常
但是如果我们直接使用 python 解释器就可以了:
这是终端输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $python
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = input("Enter a String : \n")
Enter a String :
hello
>>> print("The Entered String is : " + s)
The Entered String is : hello
>>> print("The Length of Entered String is : " + str(len(s)))
The Length of Entered String is : 5
>>> s = input("Enter a String : \n")
Enter a String :
hello
>>> print("The Entered String is : " + s)
The Entered String is : hello
>>> print("The Length of Entered String is : " + str(len(s)))
The Length of Entered String is : 5
这里尽管按方向键或退出或回家输出是相同的。
[编辑]
唯一的目标是在使用该程序时为用户提供类似终端的体验。
input
的文档提到了以下内容:
If the readline module was loaded, then input() will use it to provide elaborate line editing and history features.
因此,我们获取您的程序,并添加一个 import readline
,现在我们从中获取游标处理和其他项目:
import readline
s = None
while s != 'exit':
s = input("Enter a String : \n")
print("The Entered String is : '{}'".format(s))
print("The Length of Entered String is : {}".format(len(s)))
在这种情况下,我可以做一个 运行:
Enter a String :
hello world
The Entered String is : 'hello world'
The Length of Entered String is : 11
Enter a String :
hello world
The Entered String is : 'hello world'
The Length of Entered String is : 13
Enter a String :
exit
The Entered String is : 'exit'
The Length of Entered String is : 4
我能够使用向上箭头返回并编辑之前的输入。