Argparse:翻译API的参数太少了

时间:2017-12-16 19:06:48

标签: python 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模块,但我不确定。我是新手,所以请完整解释。提前谢谢。

1 个答案:

答案 0 :(得分:0)

哎呀 - 我觉得这段代码是你自己的;它似乎是来自github的translate脚本,https://github.com/ssut/py-googletrans/blob/master/translate

所以没有另一个解析器。

仍建议应用的诊断 - 打印sys.argv以查看解析器获取的内容,解析后打印args,并跳过(暂时)调用Translate。如果可能,请使用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)检查一下。

错误消息似乎来自您的解析器,因为用法匹配。