子进程check_output不适用于 SetFile (Mac)



我正在尝试使用SetFile来更改MacOS文件的创建和修改日期(请参阅此处(。

我的问题与此有些相似,但即使遵循那里的建议,我也无法让它工作并得到错误 1 作为回报(语法错误(

这是代码:

file_t = obj.decided_stamp.strftime('%m/%d/%Y %H:%M:%S')
# Use SetFile to change creation and modification date
cmd = ['SetFile', '-d', '-m', '{0}{1}{0}'.format(''', file_t),
'{0}{1}{0}'.format(''', obj.path)]
try:
check_output(cmd, shell=True)
except Exception as e:
logger.warning('Error {} on {} using {}'.format(e, obj.path, cmd))

如果我拿走 shell=True,我会得到错误 2(其他错误(,使用 shell 给出错误 1。

这是我得到的警告打印示例:

2018-06-04 21:06:06 main[84988] 警告错误命令 '['SetFile', '-d', '-m', "'01/13/2017 14:55:55'", "'/卷/图像/2017-01-12 会议/2017-01-13 14.55.55.jpg'"]' 返回非零退出状态 2. 在/卷/图像/2017-01-12 会议/2017-01-1314.55.55.jpg 使用 ['SetFile', '-d', '-m', "'01/13/2017 14:55:55''

", "'/卷/图像/2017-01-12 会议/2017-01-13 14.55.55.jpg'"]

知道我在那里做错了什么吗?

谢谢

好的,似乎check_output需要在调用前添加引号。还必须为每个参数提供日期(-d 和 -m(

这解决了问题:

import shlex
file_t = obj.decided_stamp.strftime(''%m/%d/%Y %H:%M:%S'')
# Use SetFile to change creation and modification date
op = shlex.quote(obj.path)
cmd = ' '.join(['SetFile', '-d', file_t, '-m', file_t, op])
try:
check_output(cmd, shell=True)
except Exception as e:
logger.warning('Error {} on {} using {}'.format(e, obj.path, cmd))

最新更新