我有一个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\heinsts
和music
答案 0 :(得分:2)
您可以使用标准包argparse
,它会正确解析字符串以包含空格。它还允许您拥有许多其他功能(例如自动准备命令帮助,here's a tutorial):
(最初来自this question)
我终于得到了OP的意思了!幸运的是,argv是一个有序列表,因此可以用空格解析dir
。
这也可以用argparse(参见下面的更新示例,solution shamelessly stolen from this question)
传递未加引号的数据的缺点是操作系统在传递给python解释器之前将特殊字符(如反斜杠)转义为。因此,您的脚本用户必须使用双引号(c:\\Users\\
)...
不确定哪个更好,但是,我会记录opts中的说明(使用argparse非常容易)和文档。
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"