我想在终端窗口中获取光标的位置。我知道echo -e "\033[6n"
和read
输出-s
可以像this answer一样默默地输出with Capturing() as output:
sys.stdout.write("\e[6n")
print(output)
,但我怎样才能在Python中执行此操作?
我已尝试this contextmanager这样:
\e[6n
但它只捕获我写的'\x1b[6n'
(^[[x;yR1
)转义序列,而不是我需要的subprocess
序列。
我也尝试生成output = subprocess.check_output(["echo", "\033[6n"], shell=False)
print(output)
并获取其输出,但同样,只捕获了我写的转义序列:
shell=True
curses
使输出成为空字符串列表。
避免\e[6n
(因为这应该是简单,穷人的游标pos getter),如何通过打印Blood Collection
--------------------
id bloodComponent
1 Whole Blood
2 Platelet
3 Plasma
4 Platelet
5 Plasma
6 Whole Blood
来获取返回的转义序列? / p>
答案 0 :(得分:3)
我们走了 - 您可以自己阅读sys.stdout
来获取价值。
我在一个问题中找到了答案,就像你的问题一样,但对于一个试图从C程序中做到这一点的人来说:
http://www.linuxquestions.org/questions/programming-9/get-cursor-position-in-c-947833/
所以,当我从Python交互式终端尝试了一些东西时:
>>> import sys
>>> sys.stdout.write("\x1b[6n");a=sys.stdin.read(10)
]^[[46;1R
>>>
>>> a
'\x1b[46;1R'
>>> sys.stdin.isatty()
True
你将不得不使用其他ANSI技巧/位置/重印以避免输出实际显示在终端上,并防止stdin读取阻塞 - 但我认为可以通过一些反复试验来完成。