【问题标题】:Why isn't print(\a) working in IDLE为什么 print(\a) 不能在 IDLE 中工作
【发布时间】:2012-10-30 02:09:12
【问题描述】:

注意我稍微更改了 q 使其不再重复。对不起。

我正在运行这些耗时的生物信息学脚本。我希望它们在完成后发出哔哔声。

我在 OS X 上。

在similar thread 中,我发现print '\a' 可能有效,但在空闲时这只会打印[]

为什么这在 IDLE 中不起作用

【问题讨论】:

标签: python macos beep beepbeep


【解决方案1】:

它不响的原因是\a(或^G)是终端铃声代码;由处理标准输出的程序决定将其转换为声音。 Terminal.app 将播放声音(除非您将其配置为“视觉铃声”,而不是完全关闭它),但 Idle 不会。当然,如果您在没有 tty 的情况下运行,您将一无所获。

如果您不介意使用 PyObjC(在所有最新版本的 OS X 上都预装了 Apple 安装的 Python):

import Cocoa
Cocoa.NSBeep()

当然,这会播放 OS X 系统提示音,而不是终端铃声。除了可能是不同的声音之外,这意味着如果您在终端中禁用铃声,您的脚本仍然会发出哔哔声。 (如果你真的想要一个终端铃声,你总是可以通过例如 ScriptingBridge 编写终端脚本。但我认为你不在乎。)

【讨论】:

  • 感谢,UV,但我想避免导入模块
  • 您有一个无需导入任何模块即可工作的生物信息学脚本?没有math、itertools,甚至没有sys?无论如何,__builtins__ 命名空间中没有会发出哔哔声的函数,因此鉴于此限制,终端铃声是您唯一的选择,这意味着您必须在 Terminal.app 中运行并保持铃声处于启用状态。
【解决方案2】:

这个使用 afplay 的小型 Python sn-p 可以满足我的需要:在程序结束时发出十声响亮的叮当声:

from os import system
for i in range(0,10):
    system('afplay /System/Library/Sounds/Glass.aiff')

我认为导入系统的开销不小,但对我有用

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2019-08-06
    相关资源
    最近更新 更多