程序性地发送键盘中断
有一个应用程序需要一个键盘中断。请问我怎么能通过程序发送一个键盘中断呢?我需要这个功能来实现自动化。就像按下 <C-c>
或 <C-x>
一样。
KeyboardInterrupt
4 个回答
1
我建议用以下的代码模式来解决这个问题。我用它来程序化地启动一个tensorboard服务器,并在它所属的对象被删除时,通过发送CTRL-C来关闭它。一般来说,这个方法适用于任何需要发送键盘中断的子进程示例:
导入signal和subprocess模块。
import signal import subprocess
使用subprocess.Popen创建子进程。重要的是:要把creationflags参数设置为subprocess.CREATE_NEW_PROCESS_GROUP。这样做是为了后面能够发送键盘中断事件。
command= <enter your command that is supposed to be run in different process as a string> process = subprocess.Popen(command.split(),stdout=subprocess.PIPE,stdin=subprocess.PIPE,creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
在你想发送键盘中断的地方,执行以下操作:
process.send_signal(signal.CTRL_C_EVENT)
就这样!想了解为什么popen的creationflags参数要这样设置,可以查看官方的subprocess文档。
以下是我示例代码的具体样子:
import signal
import subprocess
import time
class ExperimentTracker():
def __init__(self):
self.tensorboard_process=None
def __del__(self):
#shutdown tensorboard server and terminate process
self.tensorboard_process.send_signal(signal.CTRL_C_EVENT)
time.sleep(0.2)
self.tensorboard_process.kill()
def launch_tensorboard(self):
#launch tensorboard
bashCommand= "tensorboard --logdir runs"
self.tensorboard_process = subprocess.Popen(bashCommand.split(),stdout=subprocess.PIPE,stdin=subprocess.PIPE,creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
time.sleep(2) #sleep for 2 seconds to give tensorboard time to be launched
1
因为你提到自动化,我猜你是想在Python中使用SendKeys功能。你可以试试这个链接: http://rutherfurd.net/python/sendkeys/
4
在一个单独的线程中运行的代码,可以通过调用 thread.interrupt_main()
来在主线程中产生一个 KeyboardInterrupt
。这个操作会让主线程像是收到了一个键盘中断的信号。