【发布时间】:2012-07-20 06:42:42
【问题描述】:
我有一个 python 脚本需要将控制 C 发送到 mac 终端。我尝试发送纯文本“^C”,但我发现终端无法识别该命令。 (终端表示python创建的伪终端)
基本上,我使用终端来运行旧的 Unix 可执行文件,而我能想到的优雅终止它的唯一方法是发送中断信号。有什么办法可以让终端误以为我按下了控制 C?
提前致谢!
【问题讨论】:
标签: python macos terminal interrupt
我有一个 python 脚本需要将控制 C 发送到 mac 终端。我尝试发送纯文本“^C”,但我发现终端无法识别该命令。 (终端表示python创建的伪终端)
基本上,我使用终端来运行旧的 Unix 可执行文件,而我能想到的优雅终止它的唯一方法是发送中断信号。有什么办法可以让终端误以为我按下了控制 C?
提前致谢!
【问题讨论】:
标签: python macos terminal interrupt
如果您可以使用 os.kill 获取其 PID,则可以显式向该进程发送 SIGINT 信号。
os.kill(pid, signal.SIGINT)
这将要求您检测脚本以获取进程 PID,但这是模拟“ctrl-c”行为的最佳方式。
【讨论】:
SIGTERM 会不会同样/更合适?我一直认为它是解释 SIGINT 的 shell,如果它没有被底层命令捕获并为你终止命令。
如果您使用subprocess 的Popen 打开进程,您应该能够发送这样的控制信号:
proc.send_signal(signal.SIGINT)
您需要import signal 才能获得SIGINT。
【讨论】: