Python3如何在使用subprocess.run()时将二进制数据传递到stdin



那么,如何使用stdin将二进制数据传递给要使用subprocess.run()运行的可执行命令呢?

关于使用stdin将数据传递给外部可执行文件,文档非常模糊。我使用python3在linux机器上工作,我想调用dd of=/somefile.data bs=32(如果我正确理解手册页,它会从stdin获取输入(,并且我在bytearray中有二进制数据,我想通过stdin将其传递给命令,这样我就不必将其写入临时文件,并使用该文件作为输入来调用dd

我的要求只是将bytearray中的数据传递给dd命令,以便写入磁盘。使用subprocess.run()和stdin实现这一点的正确方法是什么?

编辑:我的意思是:

ba = bytearray(b"some bytes here")
#Run the dd command and pass the data from ba variable to its stdin

您可以通过直接调用Popen将一个命令的输出传递给另一个命令。

file_cmd1 = <your dd command>
file_cmd2 = <command you want to pass dd output to>
proc1 = Popen(sh_split(file_cmd1), stdout=subprocess.PIPE)
proc2 = Popen(file_cmd2, [shell=True], stdin=proc1.stdout, stdout=subprocess.PIPE)
proc1.stdout.close()

据我所知,这将在命令1的字节输出上正常工作。

在您的情况下,当您只想将数据传递给流程的stdin时,您最想做的是:

out = bytearray(b"Some data here")
p = subprocess.Popen(sh_split("dd of=/../../somefile.data bs=32"), stdin=subprocess.PIPE)
out = p.communicate(input=b''.join(out))[0]
print(out.decode())#Prints the output from the dd

特别是对于OP要求的到subprocess.run()的stdin,使用input如下:

#!/usr/bin/python3
import subprocess
data = bytes("Hello, world!", "ascii")
p = subprocess.run(
"cat -", # The - means 'cat from stdin'
input=data,
# stdin=... <-- don't use this
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
print(p.stdout.decode("ascii"))
print(p.returncode)
# Hello, world!
# 0

相关内容

  • 没有找到相关文章

最新更新