私はデバイスにバーコードファイルのいくつかの反復を送信しようとしています。これはコードの関連部分です:ソケット接続:Python
# Start is the first barcode
start = 1234567
# Number is the quantity
number = 3
with open('barcode2.xml', 'rt') as f:
tree = ElementTree.parse(f)
# Iterate over all elements in a tree for the root element
for node in tree.getiterator():
# Looks for the node tag called 'variable', which is the name assigned
# to the accession number value
if node.tag == "variable":
# Iterates over a list whose range is specified by the command
# line argument 'number'
for barcode in range(number):
# The 'A-' prefix and the 'start' argument from the command
# line are assigned to variable 'accession'
accession = "A-" + str(start)
# Start counter is incremented by 1
start += 1
# The node ('variable') text is the accession number.
# The acccession variable is assigned to node text.
node.text = accession
# Writes out to an XML file
tree.write("barcode2.xml")
header = "<?xml version=\"1.0\" standalone=\"no\"?>\n<!DOCTYPE labels SYSTEM \"label.dtd\">\n"
with open("barcode2.xml", "r+") as f:
old = f.read()
f.seek(0)
f.write(header + old)
# Create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to server
host = "xxx.xx.xx.x"
port = 9100
sock.connect((host, port))
# Open XML file and read its contents
target_file = open("barcode2.xml")
barc_file_text = target_file.read()
# Send to printer
sock.sendall(barc_file_text)
# Close connection
sock.close()
これは非常にバージョン1です。
デバイスは、最初のファイルの受信後にファイルの受信に失敗しています。これは、ポートが再びあまりにも早く再利用されているためでしょうか?これをよりうまく構築する方法は何ですか?助けてくれてありがとう。
「ElementTree」は自分のクラスですか? 'getiterator'の名前が' __iter__'に変更された場合、 'tree for:'の 'for node:'を使うことができます。これはもっとPythonicです。また、ヘッダーを書くことができないのはなぜですか? –
いいえ、ElementTreeはxml.etreeから来ます。それはヘッダーを書きます、私はちょうどソケット接続を働かせることができません。 – mbm