【问题标题】:Sending Arrow Keys to Popen将箭头键发送到 Popen
【发布时间】:2023-09-05 04:51:01
【问题描述】:

我知道可以通过writeing 将可打印输入发送到subprocesses 到他们的stdin

from subprocess import, Popen, PIPE
proc = Popen([command, goes, here], stdin=PIPE)
proc.stdin.write("m")

我将如何发送诸如箭头键按下、空格、回车或退格之类的输入?

【问题讨论】:

  • 您是否尝试运行特定命令?
  • @NathanVillaescusa - 具体来说,我正在尝试将omxplayer 作为子进程运行并发送左/右/上/下箭头以进行搜索。它的其余交互命令使用可打印字符。

标签: python popen


【解决方案1】:

我发现有人试图解决相反的问题,创建一个可以识别箭头键的程序:Recognizing arrow keys with stdin

我还发现 http://compgroups.net/comp.unix.programmer/how-to-send-up-arrow-key-to-popen-child/537480 其中说:

"\x1B[A" for up
"\x1B[B" for down

因此,如果 \x1B 是转义字符,那么您只需附加 [A 表示向上,[B 表示向下,[C 表示右,[D 表示左,依此类推。

查看http://en.wikipedia.org/wiki/ANSI_escape_sequences 了解不同代码的列表。

【讨论】:

  • 是的,做到了。出于好奇,你搜索了什么?在谷歌搜索python Popen send arrow keys 之类的东西大约 20 分钟后,我空空如也。
  • 我搜索了“python 处理 stdin 箭头键”,这导致我遇到堆栈溢出问题,然后搜索“popen ansi escape”,这导致我进入另一个链接。
【解决方案2】:

试试pyautogui 库。例如:

pyautogui.hotkey('ctrl', 'c')  # ctrl-c to copy
pyautogui.press('enter')  # press the Enter key

图书馆网页中的更多示例。 对我来说它有效 - 请参阅here

【讨论】: