Закрадываются у меня сомнения что вы неправильно понимаете не питон а то что делает операционная система и bash/sh/zsh/cmd.
bash читает команду из своего stdin до перевода строки и ее интерпретирует.
Те выше сказано вызови процесс echo передай ему аргумент командной строки “dd” запусти процесс lpr с аргументом -l и перекладывай буковки из stdout процесса echo в stdin процесса lpr.
Вот этим bash и занимается. Просит операционнную систему систему запустить два процесса, создать буфер в памяти который bash будет использовать для передачи данных. В случае ошибок bash попросит ОС показать сообщения на мониторчике.
В питоне вы говорите совершенно другое - напечатай в stdout строку “echo ‘dd’ | lpr -l”. Никаких просьб к питону что-то запустить и перенаправить ввод вывод тут нет.
Складывается впечатление что вы думаете что любые данные попадающие в stdout будут интерпретироваться bash или там святым духом например.
По вашему вот такая программа будет на принтер что-то слать?
#include <stdio.h>
int main()
{
printf("\x1b\x0d | lpr -l");
return 0;
}
Попробуйте.
Я ожидаю что принтер не пострадает.
Тут разница подходов объясняется разным назначением инструментов. bash предназначен для запуска команд. Поэтому если ему скажешь “a” то он будет пытаться запустить “a”. А вывести в stdout bash 2+2 я смогу только с мануалом. А в питоне обратная ситуация. Для запуска процессов нужен subprocess или os а 2+2 легко вывести print(2+2).