在任何人告诉我之前,我已经完全意识到我正在尝试做的事情是荒谬的,但我有我的理由。
我有一台服务器,我可以在上面编写脚本(bash 或 python)。该脚本需要接受来自 STDIN 的二进制数据并将其保存到文件中。准确的说,二进制数据是一个WAV文件。
我正在做的是使用一个名为 Workflow 的 iOS 应用程序。该应用程序将让我录制一个音频文件,然后将其作为 STDIN 输入发送到将通过 SSH 运行的脚本。所以我的脚本需要获取该 STDIN 输入并将其保存到文件中。
有什么想法/想法吗?我完全不知道从哪里开始。
请您参考如下方法:
将标准输入保存到 POSIXy 系统上的文件中:
- 确保标准输入以二进制模式打开
- 检查是否fadvise在您的案例中提高时间性能,例如,请参阅
copyfileobj()in contrib - 从标准输入中读取 block 并将它们写入文件
一般来说,你也可以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
