子进程check_output无法使用SetFile(Mac)

时间:2018-06-04 19:13:41

标签: python python-3.x macos subprocess

我正在尝试使用SetFile更改MacOS文件创建和修改日期(see here)。

我的问题与this one有些相似,但即使遵循那里的建议,我也无法让它工作并得到错误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'","' / Volumes / Images / 2017-01-12 Conference / 2017-01-13 14.55.55.jpg'"]'使用[' SetFile',' -d' ,' -m',"' 01/13/2017 14:55:55'","' / Volumes / Images / 2017-01-12 Conference / 2017-01-13 14.55.55.jpg'"]

知道我在那里做错了吗?

由于

1 个答案:

答案 0 :(得分:0)

好的,似乎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))