(Note:适用于Windows 10和Python 3+)
我已经读过几篇关于如何使用ANSI转义码获得光标位置的文章,但是它们没有提供解决方案,至少对于Python没有。Wikipedia(https://en.wikipedia.org/wiki/ANSI_escape_code)包含以下ANSI seq:在其游标管理列表中:
ESC 6 n:DSR(设备状态报告)向应用程序报告光标位置(CPR)(如同在键盘上键入)ESC[n;mR,其中n是行,m是列。)
因此,如果您使用print("\033[6n")
应用此命令,则响应将被“推”到键盘,并且只有在脚本终止后,您才会在MS DOS提示符下得到以下内容:^[[7; 11 R(数字取决于具体情况)。
现在,我真的不明白这有什么用!所以,我的问题是"Can we 'finally' get information about the cursor position using the **mentioned conditions** (Windows, ANSI codes and Python)?"
...这样我就可以一劳永逸地结束这一章了!
2条答案
按热度按时间v8wbuo2f1#
我找到了一个解决方案,你必须使用
msvcrt
,它是Python标准库的一部分。我已经在Windows 10 2004版上使用Python 3.8.7进行了尝试。
这个方法不会将光标位置输出到键盘输入缓冲区。相反,它允许你将光标位置保存到一个变量中,以便进一步操作。
结果:
tquggr8v2#
我知道我来晚了。但是我在搜索类似的东西时偶然发现了这个。它在Scheme中--我不知道Python。如果你仍然感兴趣,下面是我的做法。
request-cursor-position
过程使用的ANSI命令与您尝试使用的命令相同(\x1b;
是Scheme编写ESCAPE
字符的方式。)终端以您看到的格式返回包含光标位置的行和列的响应。这就是read-to-terminating-character
过程所做的。在本例中,响应由R
字符终止。如你所见。从这里开始,只需要解析响应中的行号和列号,我的过程将结果返回到一个包含行和列的列表中,并按照行和列的顺序返回。
对于我来说,要让这些命令可靠地工作,我必须将终端设置为“原始模式”。标准的“熟制模式”只会被控制字符串搞砸。
这里有一个小测试程序,展示了如何使用这个过程.
运行该程序会产生如下结果:
希望这能有所帮助,尽管它不是Python语言。