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 系统上的文件中:
- 确保标准输入以二进制模式打开
- 检查是否fadvise improves the time performance in your case e.g., see
copyfileobj()
in contrib
- 从标准输入读取块并将它们写入文件
一般来说,您也可以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
在任何人告诉我之前,我完全意识到我正在尝试做的事情是荒谬的,但我有我的理由。
我有一台服务器,我可以在上面编写脚本(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 系统上的文件中:
- 确保标准输入以二进制模式打开
- 检查是否fadvise improves the time performance in your case e.g., see
copyfileobj()
in contrib - 从标准输入读取块并将它们写入文件
一般来说,您也可以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