Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash或python脚本从STDIN读取二进制数据并保存到文件_Python_Bash_Ssh_Binary_Stdin - Fatal编程技术网

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

bash或python脚本从STDIN读取二进制数据并保存到文件,python,bash,ssh,binary,stdin,Python,Bash,Ssh,Binary,Stdin,在别人告诉我之前,我完全意识到我想做的是荒谬的,但我有我的理由 我有一个服务器,可以在上面编写bash或python脚本。脚本需要从STDIN接受二进制数据并将其保存到文件中。确切地说,二进制数据是一个WAV文件 我正在做的是使用一个名为Workflow的iOS应用程序。该应用程序将允许我录制一个音频文件,然后将其作为STDIN输入发送到一个脚本,该脚本将通过SSH运行。所以我的脚本需要接受STDIN输入并将其保存到一个文件中 有什么想法/想法吗?我完全不知道从哪里开始。阅读python中的st

在别人告诉我之前,我完全意识到我想做的是荒谬的,但我有我的理由

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

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


有什么想法/想法吗?我完全不知道从哪里开始。

阅读python中的stdin:

import sys
input = sys.stdin.read()
要将二进制文件写入文件,请执行以下操作:

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

其中“wb”以二进制模式发送以进行写入。

要从python中的stdin读取,请执行以下操作:

import sys
input = sys.stdin.read()
要将二进制文件写入文件,请执行以下操作:

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

其中“wb”以二进制模式发送以进行写入。

要将stdin保存到POSIXy系统上的文件,请执行以下操作:

确保stdin以二进制模式打开 检查您的情况是否提高了时间性能,例如,请参阅 从stdin读取块并将它们写入文件 一般来说,你也可以认为它不适用于你的情况

#!/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

要将stdin保存到POSIXy系统上的文件,请执行以下操作:

确保stdin以二进制模式打开 检查您的情况是否提高了时间性能,例如,请参阅 从stdin读取块并将它们写入文件 一般来说,你也可以认为它不适用于你的情况

#!/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:related:从stdin写入二进制文件。这里是cat->$file,确切地说,@Jakuje这将把stdin复制到一个文件中,即使它是二进制的。调用该工具以使用bash:related:从stdin写入二进制文件。这里是cat->$file,确切地说,@Jakuje这将把stdin复制到一个文件中,即使它是二进制的。我应该提到,read函数将读取来自stdin的所有内容,直到遇到EOT,它是\x04的十六进制或Ctrl+D。为了安全起见,您可以检查要传入stdin的字节数,然后使用sys.stdin.readnumber\u of\u bytes你说的是Windows吗?在Windows上管道化二进制数据是一项非常重要的任务,例如,请参阅。管道二进制数据在POSIX上是微不足道的,它不会在\x04或其他任何地方停止-不要混淆您在终端中键入的可能受终端设置影响的内容以及通过应用程序的stdin管道传输的数据。我刚才说的是POSIX。刚刚测试过,你完全正确。不知道为什么我会这么想。。。谢谢如果os.linesep!=b'\n'或为了与Python 3兼容,请以二进制模式打开stdin。要支持大文件,请分块读取stdin。我应该提到,read函数将读取来自stdin的所有内容,直到遇到EOT,EOT是十六进制或Ctrl+D。为了安全起见,您可以检查要传入stdin的字节数,然后使用sys.stdin.readnumber\u of\u bytes。您在说Windows吗?在Windows上管道化二进制数据是一项非常重要的任务,例如,请参阅。管道二进制数据在POSIX上是微不足道的,它不会在\x04或其他任何地方停止-不要混淆您在终端中键入的可能受终端设置影响的内容以及通过应用程序的stdin管道传输的数据。我刚才说的是POSIX。刚刚测试过,你完全正确。不知道为什么我会这么想。。。谢谢如果os.linesep!=b'\n'或为了与Python 3兼容,请以二进制模式打开stdin。要支持大文件,请分块读取stdin。请注意,这会关闭stdin的文件描述符,这可能会导致问题。为了避免这种情况,请不要使用with上下文打开stdin,而是执行以下操作:input_file=os.fdopensys.stdin.fileno,“rb”正确,复制已成功完成,但stdin文件描述符0已关闭。在块之前和之后执行os.systemf'ls-la/proc/{os.getpid}/fd',您将看到我的观点。关闭FD=0的长时间运行的程序可能会遇到奇怪的事情。一个例子是,如果您随后打开一个文件,它可能会得到FD=0,因为它是免费的。如果我们不小心并且假设FD=0总是stdin,我们可能会感到困惑。请注意,这会关闭stdin的文件描述符,这可能会导致问题。为了避免这种情况,请不要使用with上下文打开stdin,而是执行以下操作:input_file=os.fdopensys.stdin.fileno,“rb”正确,复制已成功完成,但stdin文件描述符0已关闭。在块之前和之后执行os.systemf'ls-la/proc/{os.getpid}/fd',您将看到我的观点。关闭FD=0的长时间运行的程序可能会遇到奇怪的事情。一个例子是,如果您随后打开一个文件,它可能会得到FD=0,因为它是免费的。如果我们不小心,假设FD=0总是stdin,我们可能会感到困惑。