Получение «позиционного аргумента» Ошибка при отправке файла XML в RabbitMQ из Python - PullRequest
5 голосов
/ 24 февраля 2020

Я пытаюсь отправить файл XML в RabbitMQ с python, но получаю следующую ошибку

Ошибка

File "<ipython-input-134-8a1b7f8b2e41>", line 3
    channel.basic_publish(exchange='',queue='abc',''.join(lines))
                                                                 ^
SyntaxError: positional argument follows keyword argument

Мой код

import ssl
!pip install pika
import pika
ssl_options = pika.SSLOptions(ssl._create_unverified_context())
credentials = pika.PlainCredentials(username='abcc', password='abcc')
connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='xxxx', port=5671, virtual_host ='xxx', credentials=credentials, 
        ssl_options=ssl_options))
channel = connection.channel()
result = channel.queue_declare(queue='abc')
with open('20200205280673.xml', 'r') as fp:
    lines = fp.readlines()
channel.basic_publish(exchange='',queue='abc',''.join(lines))

Что не так в коде выше?

1 Ответ

1 голос
/ 25 февраля 2020

Как подсказывает @ymz, вам не хватает клавиши body в методе basic.publish. Кроме того, метод basic_publish не имеет аргумента с именем queue. Пожалуйста, взгляните на его реализацию docs

Edit # 1: Я уже отвечал на этот вопрос в другом месте Как отправить файл XML в RabbitMQ используя Python?

Редактирование # 2: Автоматическая публикация XML файлов. Предполагая, что все файлы присутствуют в каталоге с именем xml_files

import os

DIR = '/path/to/xml_files'

for filename in os.listdir(DIR):
    filepath = f"{DIR}/{filename}"
    with open(filepath) as fp:
        lines = fp.readlines()
    channel.basic_publish(exchange='exchange', routing_key='queue', body=''.join(lines))
...