Python doit中的动态目标名称

时间:2019-07-15 19:08:35

标签: python doit

我有一个Python doit脚本,其任务是生成文件。文件名根据任务参数而变化。

有什么方法可以将这些文件包括在JSON.stringify({data})列表中?

不幸的是,任务参数没有填充到目标名称字符串中。

targets

示例任务:

'targets': ['targetfile{version}']

示例命令行:

def task_dynamic():
    return {
        'actions': ['touch targetfile{version}'],
        'params': [
            {
                'name': 'version',
                'short': 'v',
                'default': '0'
            }
        ],
        'targets': []
    }

2 个答案:

答案 0 :(得分:1)

您可以在actions (just pass the magic parameter task)或自定义uptodate上动态修改任务属性,即

DOIT_CONFIG = {
    'action_string_formatting': 'new',
}

def set_target(task, values):
    version = task.options.get('version', '0')
    task.targets.append(f'targetfile{version}')


def task_dynamic():
    return {
        'actions': ['touch targetfile{version}'],
        'params': [
            {
                'name': 'version',
                'short': 'v',
                'default': '0'
            }
        ],
        'uptodate': [set_target],
    }

有一项建议的更改,可以使此操作更容易实现,请参见问题#311

答案 1 :(得分:0)

有一个不理想的解决方案:我将动态输出放在具有稳定名称的目录中,然后在我的targets列表中引用该目录。