Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逗号';s出现在自定义Ansible查找插件返回的值中_Python_Ansible - Fatal编程技术网

Python 逗号';s出现在自定义Ansible查找插件返回的值中

Python 逗号';s出现在自定义Ansible查找插件返回的值中,python,ansible,Python,Ansible,我正在尝试编写一个小的查找插件来返回一个时间戳+1天 这主要是为了练习,但我似乎突然遇到了一个问题 在Ansible(通过调试模块)中输出时,似乎每个字符都用逗号分隔 查找插件本身是: from datetime import datetime, timedelta from ansible.plugins.lookup import LookupBase # Small plugin to return time + 1 day class LookupModule(LookupBase)

我正在尝试编写一个小的查找插件来返回一个时间戳+1天

这主要是为了练习,但我似乎突然遇到了一个问题

在Ansible(通过调试模块)中输出时,似乎每个字符都用逗号分隔

查找插件本身是:

from datetime import datetime, timedelta
from ansible.plugins.lookup import LookupBase


# Small plugin to return time + 1 day
class LookupModule(LookupBase):
    def run(self, terms, variables, **kwargs):
        dt = datetime.now() + timedelta(days=1)
        return dt.strftime("%Y%m%dT%H%M%S")
放置在./lookup\u plugins/tomory.py中

正在上演的剧本是:

---
- hosts: localhost
  vars:
    test: "{{ lookup('tomorrow') }}"
  tasks:
    - debug:
        var: test
目前的结果是:

PLAY [localhost] **************************************************************

TASK [Gathering Facts] ********************************************************
ok: [localhost]

TASK [debug] ****************************************************************************

ok: [localhost] => {
    "test": "2,0,1,9,0,2,0,6,T,1,5,1,6,3,7"
}
如果我修改python文件以只打印输出,那么就可以正确地获得不带逗号的字符串

只是一个提示,我意识到在功能上我可以做到:

"{{ lookup('pipe','date -d \"1 day\" +%Y%m%dT%H%M%S') }}"
然而在这一点上,我很想知道发生了什么

然而在这一点上,我很想知道发生了什么

这是因为您正在返回一个字符串,它是Python中一个字符长的
str
,因此当
LookupBase
(或任何人)尝试迭代
run()
的输出时,它会变成
[“h”、“e”、“l”、“l”、“o”]
类型处理

我没有检查,但我检查了大约4-5个,以及所有我找到的


我认为这是一个文档错误,任何人都可以猜测“代码>运行< /COD>被设计为返回多个东西的方法是从它的PyDoc中提到的。请随时提交一份报告,让他们了解您的体验

这是有意为之。查找插件在历史上通常用于将结果管道化到循环中。所以Ansible希望看到一个列表

您可以将返回值包装到列表中,如:

return [dt.strftime("%Y%m%dT%H%M%S")]
这样,您就可以通过
查找(“明天”)
获得预期的结果


还要注意,
lookup
可能很快就会被弃用,转而支持
query
。请参阅。

感谢您提供了信息丰富的答案。感谢你的网址和所花的时间!