2016-12-01 4 views
0

結果のデータを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ファイルがちょうど私にこれらの3つのラインを提供します。

** 

** 

** 

問題の原因はわかりません。

+0

あなたは 'ser.read(156)から読んだもの書くべき'をテキストファイルに追加し、' ser.read(156) 'を2回再実行しないようにします。 –

答えて

0

ser.read(156)からデータを読み込むと、そのデータはserから削除され、再び利用できなくなります。

したがって、そのデータを2回読み取ると、ガベージデータを表示するか、まったくデータを表示できません。

変数に格納する必要があります。次のコードは正常に動作します。

data = ser.read(156) 
print data 
text_file.write(data) 
+0

ありがとうございます。 – nani92

0

おそらく、問題は、このようにあなたが行う必要があり、2 ser.readを実行して、シリアルポートから2回を読んだことにある:

ser.write(clear_msg) 
time.sleep(0.5) 
recv_msg = ser.read(156) 
print(recv_msg) #for debugging 
text_file.write(recv_msg) 
+0

ありがとうございます。 – nani92

+0

いいえpblm @ nani92 :) –

関連する問題