Python 스크립트와 bash를 사용하여 문자열을 연속으로 여러 번 번역하시겠습니까?

Python 스크립트와 bash를 사용하여 문자열을 연속으로 여러 번 번역하시겠습니까?
#!/usr/bin/python3

import argparse

vokaler = "aouåeiyäöAOUÅEIYÄÖ"
konsonanter = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ"

def viskspraket(text):
    """Removes all vowels from the sentence"""
    return "".join([x if x not in vokaler else "" for x in text])

def rovarspraket(text):
    """Consonants are doubled and "o" is put inbetween them"""
    return "".join([x + "o" + x if x in konsonanter else x for x in text])

parser = argparse.ArgumentParser()
parser.add_argument("-r", help="rovarspraket", action="store_true")
parser.add_argument("-v", help="viskspraket", action="store_true")
args = parser.parse_args()
textFromTerminal = input()

print(textFromTerminal)

if args.r:
    print(rovarspraket(textFromTerminal))

elif args.v:
    print(viskspraket(textFromTerminal))

이것은 제가 작성한 Python 스크립트이며 Bash에서 이미 번역된 문자열을 번역할 수 있어야 합니다. 이것이 내가 현재 문자열을 번역하기 위해 하고 있는 일입니다:

$ echo "random string"|./translation.py -r

그러면 출력은 다음과 같습니다.

roranondodomom sostotrorinongog

이제 "임의 문자열"을 먼저 rovarspraket으로 번역한 다음 vikspraket으로 번역하고 싶습니다. 그래서 제가 지금 번역하고 싶은 것은 "로라논도도맘 소스트로리논곡"입니다. 복사하여 붙여넣지 않고 동일한 제품을 반복하되 "-r" 대신 "-v"를 명령 인수로 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?

이중 파이프를 사용해 보았습니다.

$ echo "random string"|./translation.py -r |./translation.py -v

하지만 이것은 첫 번째 파이프를 무시하는 것 같습니까?

답변1

문제는 input()공식 Python 3 문서에서 다음과 같이 사용하고 있다는 것입니다. "그런 다음 함수는 입력에서 한 줄을 읽고 이를 문자열로 변환하고(후행 개행 제거) 해당 문자열을 반환합니다."

표준 출력의 첫 번째 줄만 반환합니다. 입력 문자열을 표준 출력의 첫 번째 줄로 출력하기 위해 스크립트를 사용하고 있으므로 두 번째 스크립트는 해당 문자열만 읽습니다.

이는 sys.stdin을 사용한 수정 사항입니다. 여러 번 전화하여 이 문제를 해결할 수도 있습니다 input().

import sys                                                                                                                             
with  sys.stdin as stdin_file:
    textFromTerminal=stdin_file.read()
    print(textFromTerminal)

    if args.r:
        print(rovarspraket(textFromTerminal))

    elif args.v:
        print(viskspraket(textFromTerminal))

관련 정보