Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2021 18:35:00

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

как сделать конвейер для консольной программы [solved]

Подскажите как сделать конвертер в Python программе типа такого:

 echo q1werty | sed "s/1/2/g"

т. е. передать выход одной программы на вход другой

моя не удачная попытка сделать это
 import sys
try:
    print(f"{sys.argv[1]}\n" * 5)
except Exception as err:
    print(f"err {err}")



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 22, 2021 18:23:59)

Офлайн

#2 Янв. 21, 2021 20:23:25

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

как сделать конвейер для консольной программы [solved]

AD0DE412 нужно читать stdin и писать в stdout
По умолчанию input() читает данные из stdin, print() печатает данные в stdout. Так что обычно их и хватает.
Но можно использовать и sys.stdin, sys.stdout
При запуске Питона, sys.stdin/sys.stdout обычно указывают на стандартные потоки ввода/вывода, унаследованные от родительского процесса или полученные от консоли.
Работа напрямую с sys.stdin, sys.stdout такая же как с другими текстовыми файлами.
пример:

 for line in sys.stdin:
    print(line.rstrip('\n'))
пример из Лутца:
<countlines.py>
import sys
data = sys.stdin.readlines()
print ("Counted", len(data), "lines.")

$ cat countlines.py | python countlines.py
Counted 3 lines.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 21, 2021 21:10:44)

Офлайн

#3 Янв. 21, 2021 21:29:24

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

как сделать конвейер для консольной программы [solved]

AD0DE412
Подскажите как сделать конвертер в Python программе типа такого:
Конвеер реализуется командной оболочкой. Если у вас нет дополнительных требований то ей и надо пользоваться.
Буду крайне банален
 import subprocess as sp
sp.run('echo q1werty | sed "s/1/2/g"',shell=True)



Офлайн

#4 Янв. 22, 2021 01:18:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

как сделать конвейер для консольной программы [solved]

  
>>> import subprocess
>>> 
>>> cmd = subprocess.run(
...     """echo x | tr x X""",
...     shell=True,
...     stdout=subprocess.PIPE)
>>> 
>>> cmd
CompletedProcess(args='echo x | tr x X', returncode=0, stdout=b'X\n')
>>> cmd.stdout
b'X\n'
>>>


tags: subprocess



Отредактировано py.user.next (Янв. 22, 2021 01:19:28)

Офлайн

#5 Янв. 22, 2021 18:14:41

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

как сделать конвейер для консольной программы [solved]

решено (ну почти … там ерунда осталась)

 import sys
if len(sys.argv[1:]):
    print(f"{sys.argv[1:]}" * 5)
else:
    data = sys.stdin.readlines()
    print(f"{data}" * 5))

всем спасибо
PEHDOM спсбо за очень удачный пример



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 22, 2021 18:26:01)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version