Python 获取带有通配符的系统参数

问题描述

环境:
macOS 10.12
python 2.7

python脚本获取系统参数的方式为python xxx.py argv1 argv2

今天在写脚本的时候,我需要在脚本中获取类似*.txt的参数,我的shell命令为python xxx.py aaa bbb *.txt然而在脚本中实际获取到的是test.txt(运行目录下有个包括该文件在内的多个txt文件),把命令换成:python xxx.py aaa bbb '*.txt'程序就报错了

为什么会是这种情况呢?


给出一些关键代码和目录结构:
test.py


import sys

if __name__ == '__main__':
    file_name_pattern = sys.argv[1]
    print file_name_pattern
    handle(file_name_pattern)

目录结构:

ls ~/Desktop

test_end.txt
test_sed1.txt
test_sed2.txt

场景一:
运行目录:~/Desktop
命令:python test.py *.txt
结果:test_end.txt

场景二:
相同目录
命令:python test.py '*.txt'
结果:正确运行了。。。

=======分割线========

总结一下,是我自己测试失误,报错是我业务代码的错误,没细看就来提问了
最终的解决方案就是包上引号''后可以正确得到参数,不加参数可能会先进行处理?有知道的同学可以分析一下哈~

阅读 4.7k
1 个回答

因为运行python之前,shell会先把*展开再传给python,这样argv[1]得到的是当前目录的第一个文件(argv[2]第二个,以此类推)。而加了单引号的*, shell会原封不动得传给python, 从而正确处理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题