意外异常:调用 ansible2 时未定义名称“basestring”

新手上路,请多包涵

我正在尝试执行 ansible2 commnads …

当我做:

 ansible-playbook -vvv -i my/inventory my/playbook.yml

我得到:

意外异常:未定义名称“basestring”完整的回溯是:

>  Traceback (most recent call last):
>   File "/usr/local/bin/ansible-playbook", line 85, in <module>
>     sys.exit(cli.run())
>   File "/usr/local/lib/python3.4/site-packages/ansible/cli/playbook.py", line 150, in run
>     results = pbex.run()
>   File "/usr/local/lib/python3.4/site-packages/ansible/executor/playbook_executor.py", line 87, in run
>     self._tqm.load_callbacks()
>   File "/usr/local/lib/python3.4/site-packages/ansible/executor/task_queue_manager.py", line 149, in load_callbacks
>     elif isinstance(self._stdout_callback, basestring):
> NameError: name 'basestring' is not defined
>
> ```

这是 `ansible --version` :

ansible 2.0.0.2 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides


这是 `python --version`

Python 3.4.3

”`

原文由 code_monk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 667
2 个回答

低于版本 2.5 的 Ansible 需要控制主机上的 Python 2.6 或 2.7: Control Node Requirements

basestring 在 Python 3 中不再可用。来自 Python 3.0 的新增功能

删除了内置的 basestring 抽象类型。使用 str 代替。 strbytes 类型没有足够的共同功能来保证共享基类。 2to3 工具(见下文)将每次出现的 basestring 替换为 str

所以解决方案是升级 Ansible 或降级 Python。

原文由 udondan 发布,翻译遵循 CC BY-SA 4.0 许可协议

basestring 在 Python 3 中不可用:

这可以通过以下方式为 python 2.x 和 3.x 修复:

 try:
  basestring
except NameError:
  basestring = str

原文由 Chris Laidler 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题