如何避免Linux下Python的argv将*解析为系统文件?
解决Linux下Python argv解析
*被替换的问题 这是**Shell路径扩展(Globbing)**导致的问题:Linux Shell会自动把命令行中的*解析为当前目录下的匹配文件列表,再将展开后的内容传递给Python脚本,所以脚本通过argv[4]拿到的是展开后的文件名,而非原始的*符号。
可以通过以下几种方式解决:
用引号包裹
*
执行命令时将*用单引号或双引号括起来,Shell会将引号内的内容视为普通字符串,不做路径扩展:python test.py export file '*' # 或者 python test.py export file "*"此时脚本中
argv[4]的值就是*,判断argv[4] == '*'会返回True。用反斜杠转义
*
在*前添加反斜杠,告诉Shell不要解析这个符号,直接传递给脚本:python test.py export file \*脚本内兼容处理(可选)
如果用户忘记添加引号或转义,Shell已经完成了路径扩展,此时脚本无法从argv中获取原始的*。可以通过以下方式优化体验:- 检查
argv的长度:若用户输入的是*,Shell会将其展开为多个文件名,argv的长度会超过预期的5个元素; - 在脚本的帮助信息中明确说明:若要传递
*符号,需要用引号包裹或反斜杠转义。
- 检查
内容的提问来源于stack exchange,提问作者Yuqi Wang
相关产品推荐
相关产品推荐

