python命令行参数必须用引号括起来吗?

时间:2016-06-30 15:01:59

标签: python-2.7

我遇到了这个问题,并找到了解决方案。但是,我不明白为什么它会像这样。

假设我有一个要运行的script1.py,它需要来自命令行的两个输入,一个路径和一个日期。对于/ root / x / y *,有两个文件夹,即/ root / x / y1 /和/ root / x / y2 /。在这两个文件夹下,有一个20160621的文件夹。

脚本看起来像这样。

if __name__ == "__main__":

    start_time = time.time()
    print sys.argv[1], sys.argv[2]
    main(expPath = sys.argv[1], expDate = sys.argv[2])

如果我通过

调用脚本
python script1.py /root/x/y*/ 20160621

我希望打印出

/root/x/y*/ 20160621

然而,有时,我会

/root/x/y1/  /root/x/y2/

如果我通过引用两个参数来调用脚本,它会按预期工作。

python script1.py '/root/x/y*/' '20160621'

这种差异的任何特定原因或解释?

1 个答案:

答案 0 :(得分:2)

这不是Python问题。这是关于命令行的问题。

当您在命令行上传递/root/x/y*/时,您并没有真正传递该参数。你正在使用名为" globbing"的东西。在将命令行传递给脚本之前,命令行会自动将其扩展为'/root/x/y1/' '/root/x/y2/'。当你把它们放在引号中时,你传递的是文字文本,而不允许命令行对文本进行全局化,所以它就像你期望的那样。

我建议您允许命令行在可行的情况下处理globbing。许多shell具有相当高级的通配能力,最终用户将依赖此功能将文件名传递给您的脚本。