我正在尝试将结果数据从python脚本发送到文件文本。
import string
import serial
import time
from array import array
import struct
import binascii
ser = serial.Serial(
port='COM4',\
baudrate=230400,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=0)
text_file = open('C:\\Users\\user\\Ciphertxt.txt', 'w')
f = open(r'C:\\Users\\user\\Plaintxt.txt', 'r')
for a in f:
plaintxt_16b=a[0:32]
plaintext=binascii.unhexlify(plaintxt_16b)
clear_msg=b'\x24'+b'\x73'+b'\x10'+plaintext
ser.write(clear_msg)
time.sleep(0.5)
print(ser.read(156))
text_file.write(ser.read(156))
ser.close() # close ports
此行print(ser.read(156))
已经为我显示了良好的数据,因此我确信结果是:
*************************
e0370734 313198a2 885a308d 3243f6a8
Go encrypt..
Encrypt done..
196a0b32 dc118597 2dc09fb 3925841d
***********************
*************************
ccddeeff 8899aabb 44556677 112233
Go encrypt..
Encrypt done..
d6e4d64b 27d8d055 c5c7573a 8df4e9aa
***********************
*************************
54776f20 4f6e6520 4e696e65 2054776f
Go encrypt..
Encrypt done..
155d4a8c 17d78b93 409745dd e73be537
***********************
但是Ciphertxt.txt文件只给了我这三行。
**
**
**
我不明白问题所在。
答案 0 :(得分:0)
从ser.read(156)
读取数据后,该数据将从ser
中删除,您将无法再次使用该数据。
因此,读取该数据两次可以为您提供垃圾数据,或者根本不提供任何数据。
您应该将其存储在变量中。以下代码可以正常工作。
data = ser.read(156)
print data
text_file.write(data)
答案 1 :(得分:0)
问题可能是问题在于通过执行两个ser.read
从串口读取两次,因此您应该这样做:
ser.write(clear_msg)
time.sleep(0.5)
recv_msg = ser.read(156)
print(recv_msg) #for debugging
text_file.write(recv_msg)