You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本用sys.argv传通配符参数在Windows执行失败如何解决

问题原因

Linux/Unix系统的shell会自动将命令中的通配符(比如*.txt)展开为匹配到的所有文件路径列表,再传给Python脚本;但Windows系统的PowerShell/CMD默认不会做通配符展开,会直接把logs/*.txt作为完整字符串参数传给脚本,导致脚本尝试打开名称带*的不存在的文件,触发OSError。

解决方案

方法1:修改调用命令(无需改动脚本)

在Anaconda PowerShell中执行命令时,先手动触发通配符展开再传递给脚本,命令如下:

python script_name.py (Get-ChildItem logs\*.txt | ForEach-Object { $_.FullName })
# 简化写法
python script_name.py (gci logs\*.txt).FullName

这种方法适合没有脚本修改权限、仅需临时运行的场景。

方法2:修改脚本适配跨平台通配符(推荐)

在脚本内部增加通配符展开逻辑,不管系统shell是否做展开,都能自动处理通配符参数,修改后完整代码如下:

import sys
import json
import glob
from pathlib import Path

def main():
    filenames = []
    # 逐个处理传入参数,自动展开通配符
    for pattern in sys.argv[1:]:
        filenames.extend(glob.glob(pattern))
    
    for filename in filenames:
        path = Path(filename)
        # 可选增加encoding参数避免Windows编码问题
        with path.open(encoding='utf-8') as file:
            text = file.read()
            a = json.loads(text)

if __name__ == "__main__":
    main()

修改后在Windows PowerShell中直接执行python script_name.py logs/*.txt即可正常运行,同时兼容Linux系统的原有调用方式。

内容的提问来源于stack exchange,提问作者Theo75

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:48:02