【问题标题】:How to send control C to Mac Terminal using python?如何使用 python 将控制 C 发送到 Mac 终端?
【发布时间】:2012-07-20 06:42:42
【问题描述】:

我有一个 python 脚本需要将控制 C 发送到 mac 终端。我尝试发送纯文本“^C”,但我发现终端无法识别该命令。 (终端表示python创建的伪终端)

基本上,我使用终端来运行旧的 Unix 可执行文件,而我能想到的优雅终止它的唯一方法是发送中断信号。有什么办法可以让终端误以为我按下了控制 C?

提前致谢!

【问题讨论】:

    标签: python macos terminal interrupt


    【解决方案1】:

    如果您可以使用 os.kill 获取其 PID,则可以显式向该进程发送 SIGINT 信号。

    os.kill(pid, signal.SIGINT)
    

    这将要求您检测脚本以获取进程 PID,但这是模拟“ctrl-c”行为的最佳方式。

    【讨论】:

    • 如果该工具不是交互式的,SIGTERM 会不会同样/更合适?我一直认为它是解释 SIGINT 的 shell,如果它没有被底层命令捕获并为你终止命令。
    • ... 对于那些不熟悉信号的人,当您在终端中键入 control-c 时,它通常会发送一个信号,而不是向应用程序发送一个文字 control-c。应用程序永远不会看到 control-c 字符,这就是为什么仅仅打印或通过管道将 control-c 传递给应用程序是行不通的。
    • 啊...这就是为什么...现在更有意义了。
    • 获取 PID 的任何提示?
    【解决方案2】:

    如果您使用subprocessPopen 打开进程,您应该能够发送这样的控制信号:

    proc.send_signal(signal.SIGINT)
    

    您需要import signal 才能获得SIGINT

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2019-07-27
      • 2020-01-29
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      相关资源
      最近更新 更多