Я новичок в Python, пытались прибегая к помощи, но не поможет ..
мне нужно вызвать такие команды в трубах (Получить самую старую ожидающую почту от mailq):не Выполнить команду оболочки с трубами в Python
mailq |grep "^[A-F0-9]" |sort -k5n -k6n |head -n 1
Команда работает в оболочке.
В Python я написал следующее:
p = subprocess.Popen('mailq |grep \"^[A-F0-9]\" |sort -k5n -k6n |head -n 1', shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
response = p.communicate()[0]
Но я получаю такой результат:
сортировки: Ошибка записи: стандартный вывод: Broken трубы \ nsort: Ошибка записи \ п
Хотите знать, что вызывает такую ошибку?
не уверен, но 'STDIN = subprocess.PIPE' кажется излишним и может быть проблемой. Вы также можете рассмотреть возможность отказаться от всего, кроме 'mailq', и обрабатывать вывод в python, а не вызывать все эти дополнительные программы (и я ожидаю, что там где-то есть модуль для замены mailq). Скрывать двойные кавычки также вызывает подозрение, хотя я сомневаюсь, что это вызовет эту проблему. – cdarke
@cdarke попытался удалить набор stdin, но это не помогло. Поэтому вы предлагаете не вызывать команду оболочки, а работать с mailq с помощью какой-либо готовой библиотеки? – 0x49D1
Вы не используете какие-либо команды оболочки, которые я вижу, 'grep',' sort', 'head' - это все независимые программы. Регулярные выражения и сортировка являются встроенными в python. – cdarke