我正在使用python3
。我希望将write()
所有8位无符号整数作为子进程的1个字节 - 让我告诉你我的意思:
>>> p = subprocess.Popen(["./some_program"], stdin=subprocess.PIPE)
>>> x=0x80
>>> p.stdin.write(str.encode(chr(x)))
2
这不好,我想输出1个字节,而不是2.我想这是因为默认编码是utf-8。好的,我试试
>>> p.stdin.write(str.encode(chr(x), "ascii"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\x80' in position 0: ordinal not in range(128)
当然,也没有好处。
我在p.stdin
之后放置什么才能向子进程发送1个字节,对于从'\x00'
到'\xff'
的所有无符号整数,正好是1个字节,比如8个整数的位表示?
答案 0 :(得分:1)
您可以使用:
p = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
x = 0x80
p.stdin.write(bytearray.fromhex(format(x, 'x')))
一种更好的避免双重转换的方法是:
p = subprocess.Popen(["cat"], stdin=subprocess.PIPE)
x = [ 0x80 ]
p.stdin.write(bytearray(x))