2017-12-16 26 views
1

나는 구글 번역 API를 사용하고 있으며이 오류가 표시되고 :Argparse : 너무 적은 인수 번역 API

translate boy -d french 
usage: [-h] [-d DEST] [-s SRC] [-c] text 
: error: too few arguments 

API의 코드는

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import argparse 
import sys 
from googletrans import Translator 

def main(): 
    parser = argparse.ArgumentParser(
     description='Python Google Translator as a command-line tool') 
    parser.add_argument('text', help='The text you want to translate.') 
    parser.add_argument('-d', '--dest', default='en', 
     help='The destination language you want to translate. (Default: en)') 
    parser.add_argument('-s', '--src', default='auto', 
     help='The source language you want to translate. (Default: auto)') 
    parser.add_argument('-c', '--detect', action='store_true', default=False, 
     help='') 
    args = parser.parse_args() 
    translator = Translator() 

    if args.detect: 
     result = translator.detect(args.text) 
     result = """ 
[{lang}, {confidence}] {text} 
     """.strip().format(text=args.text, 
      lang=result.lang, confidence=result.confidence) 
     print(result) 
     return 

    result = translator.translate(args.text, dest=args.dest, src=args.src) 
    result = u""" 
[{src}] {original} 
    -> 
[{dest}] {text} 
[pron.] {pronunciation} 
    """.strip().format(src=result.src, dest=result.dest, original=result.origin, 
         text=result.text, pronunciation=result.pronunciation) 
    print(result) 

if __name__ == '__main__': 
    main() 

이다는 생각이 argparse 모듈 때문이다 그러나 나는 확실하지 않다. 나는 초보자이므로 완전하게 설명하십시오. 미리 감사드립니다.

+0

당신은'-d'와 그 인수를 제공했지만'text'를위한 문자열은 제공하지 않았습니다. 'text '는 위치 정보이므로 필수적입니다. Py3에서 오류는 누락 된 인수가 무엇인지 알려줍니다. Py2는 이러한 일반적인 "너무 적음"을 제공합니다. – hpaulj

+0

@hpaulj OP가 '소년'을 텍스트로 전달합니까? – poke

+0

소년을 텍스트로 제공했습니다. – Mohit

답변

0

죄송합니다.이 코드는 나만의 코드라고 생각합니다. github의 translate 스크립트 인 것 같습니다. https://github.com/ssut/py-googletrans/blob/master/translate

다른 파서가 없습니다.

여전히 적용 제안 진단 - Translate에 대한 호출을 파서가 구문 분석 한 후, 인쇄 args을 받고 무엇을보고, (지금은) 건너 뛸 sys.argv를 인쇄 할 수 있습니다. 가능한 경우 py3으로 실행하십시오. 단지

parser = argparse.ArgumentParser(
    description='Python Google Translator as a command-line tool') 
parser.add_argument('text', help='The text you want to translate.') 
parser.add_argument('-d', '--dest', default='en', 
    help='The destination language you want to translate. (Default: en)') 
parser.add_argument('-s', '--src', default='auto', 
    help='The source language you want to translate. (Default: auto)') 
parser.add_argument('-c', '--detect', action='store_true', default=False, 
    help='') 
args = parser.parse_args() 
print(args) 


귀하의 파서는 생산 : 즉

1347:~/mypy$ python2 stack47849057.py 
usage: stack47849057.py [-h] [-d DEST] [-s SRC] [-c] text 
stack47849057.py: error: too few arguments 
1144:~/mypy$ python2 stack47849057.py boy 
Namespace(dest='en', detect=False, src='auto', text='boy') 
1144:~/mypy$ python2 stack47849057.py boy -d french 
Namespace(dest='french', detect=False, src='auto', text='boy') 
1145:~/mypy$ python3 stack47849057.py 
usage: stack47849057.py [-h] [-d DEST] [-s SRC] [-c] text 
stack47849057.py: error: the following arguments are required: text 

그것이 귀하의 의견과 함께 작동합니다. Py3에서 언급했듯이 오류 메시지는 분명합니다.

Translator에 문제가 있다고 생각됩니다. 자체 구문 분석기가있을 수 있으며 sys.argv을 수정할 수도 있습니다. 확인하려면 print(sys.argv) 수 있습니다.

사용법이 일치하기 때문에 오류 메시지가 파서에서 오는 것 같습니다.

+0

그래, 나는 그것이 python3을 위해 일하고 있다고 생각한다. 하지만 python2를 위해서만 사용해야합니다. 왜냐하면 내가 사용하고있는 프로젝트가 python3을 지원하지 않기 때문입니다. 뭔가 제안 해 주시겠습니까? 또한 python2와 python3의 코드 차이점은 무엇입니까? @hpaulj – Mohit

+0

이 경우 유일한 차이점은 오류 메시지입니다. Py3은보다 유익해야합니다. 나는 Py3가 왜이 메시지를 보내는 동안 오류없이 실행되는지 모르겠다. 서브 파서가 필요한지 여부는 다르지만이 코드는 해당 기능을 사용하지 않습니다. – hpaulj