Traduzindo uma string com um script python, usando bash, times consecutivos?

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

Este é o script python que eu escrevi e eu preciso ser capaz de traduzir uma string já traduzida do bash. Isso é o que estou fazendo atualmente para traduzir uma string:

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

E a saída é então:

roranondodomom sostotrorinongog

Agora, se eu quisesse traduzir "string aleatória" primeiro para rovarspraket e depois para viskspraket. Então "roranondodomom sostotrorinongog" é o que eu quero traduzir agora. Existe uma maneira de fazer isso sem copiar e colar e apenas repetir o mesmo prodeduce, mas com "-v" como o parâmetro de comando em vez de "-r".

Eu tentei canalização dupla:

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

Mas isso parece simplesmente ignorar o primeiro tubo?

    
por Fredrik Danielsson 19.09.2018 / 22:11

1 resposta

0

Seu problema é que você está usando input() . Dos documentos oficiais do Python 3: "A função então lê uma linha da entrada, converte-a para uma string (removendo uma nova linha à direita) e retorna isso."

Está apenas retornando a primeira linha do stdout. Como você gera a string de entrada como a primeira linha do padrão com o seu script, o segundo script é apenas leitura disso.

Aqui está uma correção usando sys.stdin. Você também pode corrigir isso com várias chamadas para 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))
    
por 19.09.2018 / 23:48

Tags