Найти - Пользователи
Полная версия: как сделать конвейер для консольной программы [solved]
Начало » Python для новичков » как сделать конвейер для консольной программы [solved]
1
AD0DE412
Подскажите как сделать конвертер в 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}")

PEHDOM
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.
doza_and
AD0DE412
Подскажите как сделать конвертер в Python программе типа такого:
Конвеер реализуется командной оболочкой. Если у вас нет дополнительных требований то ей и надо пользоваться.
Буду крайне банален
 import subprocess as sp
sp.run('echo q1werty | sed "s/1/2/g"',shell=True)
py.user.next
  
>>> 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
AD0DE412
решено (ну почти … там ерунда осталась)

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

всем спасибо
PEHDOM спсбо за очень удачный пример
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB