Python doit 中的动态目标名称
Dynamic target names in Python doit
我有一个 Python doit 脚本,其中包含生成文件的任务。文件名根据任务参数而变化。
有没有办法将这些文件包含在 targets
列表中?
不幸的是,任务参数没有填充到目标名称字符串中。
'targets': ['targetfile{version}']
示例任务:
def task_dynamic():
return {
'actions': ['touch targetfile{version}'],
'params': [
{
'name': 'version',
'short': 'v',
'default': '0'
}
],
'targets': []
}
示例命令行:
$ doit dynamic -v 8
有一个 non-ideal 解决方案:我将我的动态输出放在一个具有稳定名称的目录中,然后在我的 targets
列表中引用该目录。
您可以在 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
我有一个 Python doit 脚本,其中包含生成文件的任务。文件名根据任务参数而变化。
有没有办法将这些文件包含在 targets
列表中?
不幸的是,任务参数没有填充到目标名称字符串中。
'targets': ['targetfile{version}']
示例任务:
def task_dynamic():
return {
'actions': ['touch targetfile{version}'],
'params': [
{
'name': 'version',
'short': 'v',
'default': '0'
}
],
'targets': []
}
示例命令行:
$ doit dynamic -v 8
有一个 non-ideal 解决方案:我将我的动态输出放在一个具有稳定名称的目录中,然后在我的 targets
列表中引用该目录。
您可以在 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