检查引号是否包围输入参数

时间:2014-04-09 11:57:09

标签: python python-2.7

我有一个python 2.7脚本通过sys.argv [1:]读取输入参数。为了不打破输入参数,必须有引号(否则sys.argv会在有空格的地方分解输入参数)。如何确保周围有引号?

示例:

python example.py -copyDir --dir:"C:\Users\heinst\Documents\heinsts music"

有没有办法检查--dir:参数是否有引号?否则列表sys.argv会将其分为两部分:C:\Users\heinst\Documents\heinstsmusic

2 个答案:

答案 0 :(得分:2)

您可以使用标准包argparse,它会正确解析字符串以包含空格。它还允许您拥有许多其他功能(例如自动准备命令帮助,here's a tutorial):

(最初来自this question

编辑:

我终于得到了OP的意思了!幸运的是,argv是一个有序列表,因此可以用空格解析dir

这也可以用argparse(参见下面的更新示例,solution shamelessly stolen from this question

传递未加引号的数据的缺点是操作系统在传递给python解释器之前将特殊字符(如反斜杠)转义为。因此,您的脚本用户必须使用双引号(c:\\Users\\)...

传递目录

不确定哪个更好,但是,我会记录opts中的说明(使用argparse非常容易)和文档。

example.py

import argparse


class JoinAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        setattr(namespace, self.dest, " ".join(values))

parser = argparse.ArgumentParser()
parser.add_argument("-copyDir", action="store_true")
parser.add_argument("-d", "--dir", nargs="+", action=JoinAction)
args = parser.parse_args()
print args.__dict__

运行它

$ python example.py -copyDir --dir C:\\Users\\heinst\\Documents\\heinsts music
{'copyDir': True, 'dir': 'C:\\Users\\heinst\\Documents\\heinsts music'}

答案 1 :(得分:1)

您可以简单地执行以下操作:

if your_input[0] == your_input[-1] == '"':
    #do something

其中your_input是字符串:"C:\Users\heinst\Documents\heinsts music"