我遇到了这个问题,并找到了解决方案。但是,我不明白为什么它会像这样。
假设我有一个要运行的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'
这种差异的任何特定原因或解释?
答案 0 :(得分:2)
这不是Python问题。这是关于命令行的问题。
当您在命令行上传递/root/x/y*/
时,您并没有真正传递该参数。你正在使用名为" globbing"的东西。在将命令行传递给脚本之前,命令行会自动将其扩展为'/root/x/y1/' '/root/x/y2/'
。当你把它们放在引号中时,你传递的是文字文本,而不允许命令行对文本进行全局化,所以它就像你期望的那样。
我建议您允许命令行在可行的情况下处理globbing。许多shell具有相当高级的通配能力,最终用户将依赖此功能将文件名传递给您的脚本。