意外的例外:name' basestring'调用ansible2时未定义

时间:2016-01-15 02:33:52

标签: python python-3.x ansible ansible-2.x

我试图执行ansible2 commnads ...

当我这样做时:

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

我明白了:

  

意外异常:name' 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

5 个答案:

答案 0 :(得分:69)

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

Python中不再提供

<script> function favAnimal() { document.getElementById("animal").innerHTML = "cat"; } </script> <h1 id="animal">Favourite Animal Placeholder</h1> <script>favAnimal()</script>。来自What’s New In Python 3.0

  

已删除内置basestring抽象类型。请改用basestringstrstr类型没有足够的功能来保证共享基类。 bytes工具(见下文)将所有2to3替换为basestring

答案 1 :(得分:12)

basetring在Python 3中不可用。:

对于python 2.x和3.x,可以使用以下方法修复此问题:

try:
  basestring
except NameError:
  basestring = str

答案 2 :(得分:0)

我在Ansible中使用Python 3遇到了这个问题,并通过派生dopy项目并在ansible脚本中安装dopy来解决此问题:

name: git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy

如果仍然出现错误,请确保将version更改为0.4.0,并从Python site-packages目录中删除所有残留的dopy软件包。

您也可以pip3 install git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy而不是在Ansible任务中。

答案 3 :(得分:0)

用str替换基字符串。在2.x中存在basestring。但在3.x版本中,基本字符串已替换为“ str”。

答案 4 :(得分:0)

问题可能是由于python版本引起的。在2.x中,basestring存在,但在3.x中,它已被替换为“ str”。