继续在命令行工具中接受输入(如 say 命令)

Posted

技术标签:

【中文标题】继续在命令行工具中接受输入(如 say 命令)【英文标题】:Continue to accept input in a command line tool (like the say command) 【发布时间】:2012-07-21 17:18:44 【问题描述】:

在 OS X 的终端中,如果您键入“say”并按回车,则命令不会退出,并且系统会说出任何后续键入的内容(后跟回车)。怎样才能达到这样的效果?

【问题讨论】:

它正在阅读standard input。 【参考方案1】:

如果您键入cat 并按回车键,则该命令不会退出,并且任何后续键入的内容,然后是回车,都会打印在屏幕上(而不是通过扬声器转换为语音,如 @ 987654323@)。因此,简单的一点是读取行直到 EOF;你可以使用fgets(),很简单,或者getline()

int main(void)

    char buffer[4096];
    while (fgets(buffer, sizeof(buffer), stdin) != 0)
    
        fputs(buffer, stdout);
        // Or invoke appropriate text-to-speech function(s)
    
    return(0);

文本到语音的转换将通过 Apple 提供的调用来完成。您可能需要使用 Objective C 来合理地访问接口,在这种情况下,您可能还需要使用其他一些输入函数或将字符串转换为适当的 Objective C 构造。

/usr/bin/say 命令使用库:

/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 633.0.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 41.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

AudioToolBox、AudioUnit 和 CoreAudio 的组合将提供文本到语音的服务。

【讨论】:

谢谢,但我的意思是如何实现不断接受输入。如果我的程序设置为: int main() //do stuff with input return; 我怎么能不让它退出并不断接受输入? 注意:一个较早的 SO 问题涵盖了Speech to Text (and Text to Speech) APIs。

以上是关于继续在命令行工具中接受输入(如 say 命令)的主要内容,如果未能解决你的问题,请参考以下文章

使用expect实现自动交互,shell命令行自动输入

将 GUI 附加到命令行工具

处理用户输入与显示数据------------(getopt命令)

Swift 代码在 Playground 中有效,但在命令行工具中无效

如闪电划破雨夜,这些开源项目瞬间点亮了命令行

linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令