Python argparse接收带斜杠参数被自动拼接路径如何解决
问题根源
这个路径自动拼接的行为不是argparse模块导致的,根源是你在Windows平台下使用了类Unix终端(比如Git Bash、MSYS2、Cygwin),这类终端默认带自动路径转换机制:会把所有以/开头的参数识别为Unix风格路径,在参数传递给Python进程前就自动转换成对应的Windows绝对路径,argparse只是拿到了转换后的参数而已。
解决方案
根据使用场景可以选择以下任意一种方案处理:
- 方案1:单次执行时禁用终端路径转换(无需改代码)
执行脚本前添加环境变量MSYS_NO_PATHCONV=1即可关闭当前命令的路径转换,执行命令改为:
即可拿到MSYS_NO_PATHCONV=1 python script.py "/bin/exec 10"/bin/exec 10的原始参数。 - 方案2:代码侧兼容处理(无需用户修改执行配置)
约定用户传入以/开头的命令时前缀加两个斜杠//,这类终端遇到双斜杠开头的参数就不会触发路径转换,拿到参数后再做一次还原即可,代码示例:
此时用户执行命令改为:import argparse parser = argparse.ArgumentParser() parser.add_argument('execCmd' , type=str) args = parser.parse_args() # 还原双斜杠开头的参数为单斜杠格式 if args.execCmd.startswith('//'): args.execCmd = args.execCmd[1:] print(args)
就能得到预期的原始参数。python script.py "//bin/exec 10" - 方案3:更换终端执行
使用Windows原生的cmd或者PowerShell执行脚本,不会触发路径转换,直接就能拿到原始输入的参数。
内容的提问来源于stack exchange,提问作者Anshul Goyal
相关产品推荐
相关产品推荐

