Попробовав несколько пакетов, помимо упомянутых в вопросе (например, пакет stdin
), я наконец решил вернуться к тому, с чего начал:
def bash_read(optstr="-rs -t1 -n1"):
child = subprocess.Popen(["bash", "-c", "if read {}; then echo -n \"$REPLY\"; fi".format(optstr)], stdout=subprocess.PIPE)
reply = child.communicate()[0] # stdout content
return reply
Для параметра optstr
по умолчанию заданы параметры Bash read
, которые я обычно использую, однако другие параметры могут быть заменены по желанию.
Вышеуказанная функция упрощает перемещение моих сценариев на Python.Но действительно ли это Pythonic?Ну да!В смысле использования правильного инструмента для работы.
Вышесказанное упрощается, когда 3.7 попадает в дистрибутивы, для чего требуется всего один вызов subprocess.run()
, чтобы получить код возврата и текст изстандартный вывод команды и стандартный вывод.