Argparse:参数翻译太少 API

Argparse: too few arguments translation API

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

糟糕 - 我以为这段代码是你自己的;它似乎是来自 github、https://github.com/ssut/py-googletrans/blob/master/translate

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) 检查一下。

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