#!/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,然后再翻译为 viskspraket。所以我现在要翻译的是“roranondodomom sostotrorinongog”。有没有一种方法可以做到这一点,而无需复制和粘贴,只需重复相同的产品,但使用“-v”作为命令参数而不是“-r”。
我尝试了双管道:
$ 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))