如何处理python参数中的引号

时间:2016-12-04 07:55:34

标签: python parameter-passing python-3.5 argparse

我在python3.5中使用Argparse。我需要的参数之一是一个长字符串,可能有任何字符,如单引号或双引号。我不想限制用户如何使用此python脚本并强制他删除此字符。所以我正在寻找一个解决方案来处理我的代码中的引号。

这是我的论证解析器:

class MyParser(argparse.ArgumentParser):
    def error(self, message):
        sys.stderr.write('Error: %s\n' % message)
        self.print_help()
        sys.exit(2)

    def msg(name=None):
        return '''python3.5 file.py Text'''

parser = MyParser(description='You must pass exactly one arguments after classifier.py . Use quotes after and before the argument.', usage=MyParser.msg())
parser.add_argument('text', help='"News Text" for classification (Required Parameter)')
args = parser.parse_args()

此类型的参数因无法识别的错误而失败:

>>> python3.5 file.py "Apps infected by Gooligan include "Perfect Cleaner," and more."
Error: unrecognized arguments: Cleaner, and more.

有时没有任何错误:

>>> python3.5 file.py "Now "Support is expensive, and, when you're Google or any other vendor," said Michael Jude."
>

我想知道第二类错误的原因和我的代码中处理错误的解决方案,而不关注参数。

2 个答案:

答案 0 :(得分:1)

这不是argparse问题。这是shell如何分割输入行并将其传递给Python的问题。请查看sys.argv,了解argparse必须使用的内容。

我相信反斜杠允许你在字符串中包含引号和其他特殊字符 - 但是经验。

从侧栏: Python argparse argument with quotes

答案 1 :(得分:0)

与许多人所相信的不同,不是将命令行分割为参数的外壳。它也不是进程加载器,尽管它自己进行一些解析和解释。

命令行由python进程本身解析为参数向量。根据python的构建方式,它将是某种运行时库。对于Windows构建,这很可能是MS Visual C ++运行时库。有关如何解析命令行的更多详细信息,请参见Visual C ++文档:Parsing C++ command-Line arguments

要查看未处理的命令行,可以使用以下代码:

import win32api
print(win32api.GetCommandLine())