使用 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

现在,如果我想先将“随机字符串”翻译为 rova​​rspra​​ket,然后再翻译为 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))

相关内容