#!/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))