Python - 使用 STDIN 和 STDOUT 的子进程
Python - Subprocess with STDIN and STDOUT
我想将一个字节对象从文件 A.py 传递到 B.py,它在其中递增 1,然后传回。目前我有以下代码,每当我 运行 python A.py
时,程序都不会打印任何内容。我觉得问题出在文件 B.py 中,但我不确定。
A.py
import subprocess
import struct
door = subprocess.Popen(['python','B.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
door.stdin.write(struct.pack(">B", 0))
door.stdin.flush()
print(struct.unpack(">B", door.stdout.read()))
B.py
import sys
import struct
my_input = sys.stdin.buffer.read()
nbr = struct.unpack(">B", my_input)
sys.stdout.buffer.write(struct.pack(">B",nbr+1))
sys.stdout.buffer.flush()
在 B.py
中,您没有指定要读取的字节数。它默认读取直到获得 EOF,这在 A.py
关闭管道之前不会发生。
所以要么在写入后关闭 A.py
中的管道(将 door.stdin.flush()
替换为 close(door.stdin)
,要么让 B.py
只读取它需要的字节数。
my_input = sys.stdin.buffer.read(struct.calcsize(">B"))
我想将一个字节对象从文件 A.py 传递到 B.py,它在其中递增 1,然后传回。目前我有以下代码,每当我 运行 python A.py
时,程序都不会打印任何内容。我觉得问题出在文件 B.py 中,但我不确定。
A.py
import subprocess
import struct
door = subprocess.Popen(['python','B.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
door.stdin.write(struct.pack(">B", 0))
door.stdin.flush()
print(struct.unpack(">B", door.stdout.read()))
B.py
import sys
import struct
my_input = sys.stdin.buffer.read()
nbr = struct.unpack(">B", my_input)
sys.stdout.buffer.write(struct.pack(">B",nbr+1))
sys.stdout.buffer.flush()
在 B.py
中,您没有指定要读取的字节数。它默认读取直到获得 EOF,这在 A.py
关闭管道之前不会发生。
所以要么在写入后关闭 A.py
中的管道(将 door.stdin.flush()
替换为 close(door.stdin)
,要么让 B.py
只读取它需要的字节数。
my_input = sys.stdin.buffer.read(struct.calcsize(">B"))