2014-10-24 8 views
0

Я использую скрипт в python для извлечения писем с сервера Postfix. Этот сценарий извлекает письма, удаляет заголовки и оставляет только тело письма. Затем он использует это тело для выполнения команды linux на os.system(). Например, я отправляю электронную почту с mkdir folder, и скрипт создает это.Использование os.system() в python для выполнения команды linux

Проблема была, когда я отправлял ls по почте. Я получил ответ : not found ls

Вторая проблема связана с mkdir причиной добавляет ^M назвать из электронной почты. Например, я отправил mkdir folder и создал «folder?».

Есть ли у вас идеи?

+0

Не могли бы вы показать код, так как 'os.system (" ls ")' отлично работает для меня. – matsjoyce

+3

Рассмотрите возможность использования модулей 'email' и' smtplib' для этой задачи. Также надейтесь, что никто не узнает ваш адрес электронной почты и отправит 'rm -rf /' :) –

+0

подпроцесс. Это часть, которая покидает тело и выполняет os.system. Предыдущее - это только получение писем. для части в msg.walk(): #print только тело почты если part.get_content_maintype() == 'многочастному': продолжают если part.get_content_subtype() = 'просто': продолжают полезной нагрузки = part.get_payload() print полезная нагрузка os.system (полезная нагрузка) если я использую os.system ("ls"), это работает, но мне нужна переменная – mac

ответ

2

Вы уже определили проблему: в письмах есть^M символов, которые вы не ожидаете. (CR LF - обычное соглашение о завершении строки, Unix обычно не нравится CR).

Попробуйте удалить "\ r" из вашей команды: command = command.translate(None, "\r").

Я также настоятельно рекомендую вам внимательно рассмотреть последствия для безопасности выполнения любых команд, предоставляемых по электронной почте. Вероятно, гораздо более безопасный способ сделать то, что вы пытаетесь выполнить.

+0

Большое спасибо! Я добавил payload = payload.translate (None, "\ r"), и он разрешил обе проблемы. – mac