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

bash or python script to read binary data from STDIN and save to a file

在任何人告诉我之前,我完全意识到我正在尝试做的事情是荒谬的,但我有我的理由。

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

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

有ideas/thoughts吗?我完全不知道从哪里开始。

从 python 中的标准输入读取:

import sys
input = sys.stdin.read()

将二进制文件写入文件:

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

其中 'wb' 以二进制模式发送写入。

要将标准输入保存到 POSIXy 系统上的文件中:

  1. 确保标准输入以二进制模式打开
  2. 检查是否fadvise improves the time performance in your case e.g., see copyfileobj() in contrib
  3. 从标准输入读取块并将它们写入文件

一般来说,您也可以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