#!/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ドキュメントで次のように使用していることです。その後、関数は入力から1行を読み取り、それを文字列に変換し(末尾の改行を削除し)、その文字列を返します。
標準出力の最初の行だけを返します。入力文字列を標準出力の最初の行に出力するためにスクリプトを使用しているため、2番目のスクリプトはその文字列のみを読み取ります。
これは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))