bash或python脚本从STDIN读取二进制数据并保存到文件

时间:2015-12-28 20:16:37

标签: python bash ssh binary stdin

在有人告诉我之前,我完全意识到我想做的事情是荒谬的,但我有自己的理由。

我有一个服务器,我可以在其上编写脚本(bash或python)。脚本需要接受来自STDIN的二进制数据并将其保存到文件中。确切地说,二进制数据是WAV文件。

我正在做的是使用名为Workflow的iOS应用程序。该应用程序将让我录制一个音频文件,然后将其作为STDIN输入发送到它将通过SSH运行的脚本。所以我的脚本需要获取STDIN输入并将其保存到文件中。

任何想法/想法?我完全迷失在哪里开始。

2 个答案:

答案 0 :(得分:4)

将stdin保存到POSIXy系统上的文件:

  1. 确保以二进制模式打开stdin
  2. 检查fadvise是否可以改善您案例中的时间效果,例如,请参阅copyfileobj() in contrib
  3. 从stdin读取块并将它们写入文件
  4. 一般情况下,您也可以try os.sendfile() if stdin might be redirected from a file (mmap-able file descriptor)(在您的情况下不适用)。

    #!/usr/bin/env python
    import os
    import shutil
    import sys
    
    with os.fdopen(sys.stdin.fileno(), 'rb') as input_file,\
         open(sys.argv[1], 'wb') as output_file:
        shutil.copyfileobj(input_file, output_file)
    

    示例:

    $ python -msave_stdin output_file
    

    应该相当于:

    $ cat >| output_file
    

答案 1 :(得分:3)

从python中的stdin读取:

import sys
input = sys.stdin.read()

将二进制文件写入文件:

with open('name_of_file_here','wb') as output:
   output.write(input)

'wb'以二进制模式发送写入的地方。