我在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."
>
我想知道第二类错误的原因和我的代码中处理错误的解决方案,而不关注参数。
答案 0 :(得分:1)
这不是argparse
问题。这是shell如何分割输入行并将其传递给Python的问题。请查看sys.argv
,了解argparse
必须使用的内容。
我相信反斜杠允许你在字符串中包含引号和其他特殊字符 - 但是经验。
答案 1 :(得分:0)
与许多人所相信的不同,不是将命令行分割为参数的外壳。它也不是进程加载器,尽管它自己进行一些解析和解释。
命令行由python进程本身解析为参数向量。根据python的构建方式,它将是某种运行时库。对于Windows构建,这很可能是MS Visual C ++运行时库。有关如何解析命令行的更多详细信息,请参见Visual C ++文档:Parsing C++ command-Line arguments。
要查看未处理的命令行,可以使用以下代码:
import win32api
print(win32api.GetCommandLine())