Argparse:翻译API的参数太少了

问题描述 投票:1回答:1

我正在使用谷歌翻译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模块,但我不确定。我是新手,所以请完整解释。提前致谢。

python api argparse
1个回答
0
投票

哎呀 - 我觉得这段代码是你自己的;它似乎是来自github,translatehttps://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)来检查。

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

© www.soinside.com 2019 - 2024. All rights reserved.