Сокетное соединение: Python - PullRequest
       3

Сокетное соединение: Python

0 голосов
/ 07 декабря 2010

Итак, я пытаюсь отправить несколько итераций файла штрих-кода на устройство. Это соответствующая часть кода:

# 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 Ответ

4 голосов
/ 07 декабря 2010
target_file = open("barcode2.xml")   
barc_file_text = target_file.read()         
sock.sendall(barc_file_text)  
sock.close()

Сокет закрывается, а файл - нет.В следующий раз, когда вы пройдете через цикл, файл уже заблокирован, когда вы доберетесь до детали with open....

Решение: используйте здесь также with open....Кроме того, вам не нужно все делать по-детски;не называйте что-либо (присваивая это переменной), если это не важно.

with open("barcode2.xml", "r") as to_send:
    sock.sendall(to_send.read())
sock.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...