Текст трубы для скрипта Python или подсказки

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

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

$ cat message.txt | emailer.py fandingo@example.com $ tail -n 2000 /var/log/messages | emailer.py fandingo@example.com 

Оба они достаточно легки. Я могу просто sys.stdin.read() и получить свои данные.

Проблема, с которой я сталкиваюсь, заключается в том, что я также хочу поддержать запрос на ввод сообщения со следующим использованием:

 emailer.py --attach-file /var/log/messages fandingo@example.com Enter Your message. Use ^D when finished. >> Steve, >> See the attached system log. See all those NFS errors around 2300 UTC today. >> >> ^D 

Проблема, с которой я sys.stdin.read() , заключается в том, что если я пытаюсь sys.stdin.read() , и нет данных, тогда моя программа блокирует, пока stdin не получит данные, но я не могу распечатать приглашение. Я мог бы сделать безопасный подход и использовать raw_input("Enter Your message. Use ^D when finished.") Вместо stdin.read() , но затем я всегда распечатываю приглашение.

Есть ли способ увидеть, что пользователь отправил текст в python без использования метода, который будет блокироваться?

One Solution collect form web for “Текст трубы для скрипта Python или подсказки”

Вы можете использовать sys.stdin.isatty чтобы проверить, sys.stdin.isatty ли сценарий в интерактивном режиме. Пример:

 if sys.stdin.isatty(): message = raw_input('Enter your message ') else: message = sys.stdin.read() 
  • абстрагирование преобразования между тегами id3, тегами m4a, тегами flac
  • Прочитать текущий цвет текста в xterm
  • Выполнение пользовательской вкладки в python argparse
  • Pyexcel_xlsx успешно установлен, но импорт по-прежнему является синтаксической ошибкой
  • Подпроцесс Python не интерпретирует «~», как ожидалось, на cygwin
  • Утилита для подсчета количества строк кода в Python или Bash
  • BLAS / LAPACK не установлен: как его установить?
  • python - os.getenv и os.environ не видят переменных среды моей оболочки bash
  • Фильтрация координат в заданном диапазоне
  • Преобразование PDF в DOC (Python / Bash)
  • Запуск jQuery в статическом файле HTML из Bash
  • Python - лучший язык программирования в мире.