Python通过subprocess调用SetFile修改macOS文件创建日期异常求助
问题原因与解决方法
核心问题
多余引号引发解析错误:你用
subprocess.Popen的列表传参模式时,给日期字符串加了"(双引号),但这种模式下每个参数是独立传递的,不需要额外加引号——终端里的引号是用来告诉shell不要拆分带空格的参数,而subprocess列表模式已经帮你处理了空格问题。带引号的日期会被SetFile判定为无效格式,进而解析出错误日期。系统区域格式冲突:你的系统是法语区域(日期格式为
dd/mm/yyyy),但SetFile强制要求使用mm/dd/yyyy格式。即使去掉引号,系统的区域设置也可能让SetFile把01/03/2012错误识别为1日3月,而非预期的3日1月。
修正后的代码
import subprocess import os path = '/Users/marinnagy/Desktop/banner.jpg' # 复制系统环境变量,强制设置日期解析为美式格式 env = os.environ.copy() env['LC_TIME'] = 'en_US.UTF-8' # 直接传递日期字符串(不要加引号);用subprocess.run替代Popen,方便追踪执行状态 subprocess.run(['SetFile', '-d', '01/03/2012 12:00:00 PM', path], env=env, check=True)
关键说明
- 去掉引号:列表传参时,
'01/03/2012 12:00:00 PM'作为独立参数传递,SetFile能正确识别日期格式。 - 强制美式日期解析:通过设置
LC_TIME=en_US.UTF-8,让SetFile忽略系统法语区域,严格按照mm/dd/yyyy解析日期,避免格式混淆。 - 使用subprocess.run:相比
Popen,run会等待命令执行完成,加上check=True还能在命令执行失败时抛出异常,方便排查问题。
内容的提问来源于stack exchange,提问作者Marin Nagy
相关产品推荐
相关产品推荐

