Ansible: module_stdout: "/bin/sh: 1: /usr/bin/python: 未找到\r\n",

创建于 2016-12-21  ·  19评论  ·  资料来源: ansible/ansible

ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | 失败的! => {
“改变”:假,
“失败”:真的,
"module_stderr": "到 35.166.197.222 的共享连接已关闭。\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: 未找到\r\n",
"msg": "模块故障"
}

affects_2.3 needs_info needs_template

最有用的评论

只需在您的库存文件中使用ansible_python_interpreter=/usr/bin/python3

所有19条评论

请使用问题模板而不是删除它 - 这不是可操作或有用的错误报告。 我怀疑你正在运行 Ubuntu 16+ 或其他没有安装默认 python3 的东西,但如果没有完整的错误报告,我们就无法判断。

AWS 中的最新图像没有安装可用的 Python……您需要将其添加为前置任务:

  pre_tasks:

    - name: Refresh apt cache
      become: no
      local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get update

    - name: Install Python-apt to pull in Python
      become: no
      local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get install --no-install-recommends --assume-yes python-apt

我必须在我的任务中使用它来让 AMI 与 Ansible 很好地工作。

Ubuntu Xenial 默认安装了 Python3,我认为它位于/usr/bin/python3 (不过我不太确定)。

看到这个答案: http :

请注意,禁用初始化任务的事实收集很重要。

是的,python解释器的路径可以在运行时给出
-e 'ansible_python_interpreter=/usr/local/bin/python' 运行脚本时。

但是在ansible配置文件中必须有某种方式我们可以在其中提及python解释器路径还是在那里?

如果不存在,则需要实施。

只需在您的库存文件中使用ansible_python_interpreter=/usr/bin/python3

@guruprasad85这个问题正在等待您的回复。 请回复,否则问题将被关闭。

单击此处获取机器人帮助

@guruprasad85问候! 感谢您花时间打开这个问题。 为了让社区有效地处理您的问题,我们需要更多信息。

以下是我们在您的描述中找不到的项目:

  • 问题类型
  • ansible 版本
  • 组件名称

请使用此模板设置此问题的描述:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

单击此处获取机器人帮助

由于我需要 python2,我添加了第一个任务:

- name: dependency provisioning
  hosts: all
  become: yes
  become_method: sudo
  gather_facts: false
  tasks:
    - name: install python2
      raw: sudo apt-get -y install python-simplejson

更多信息在这里

@guruprasad85这个问题正在等待您的回复。 请回复,否则问题将被关闭。

单击此处获取机器人帮助

以上解释足以解决这个问题。

一些补充阅读:

http://docs.ansible.com/ansible/faq.html#how -do-i-handle-python-pathing-not-have-a-python-2-x-in-usr-bin-python-on-远程机器

如果您有其他问题,请访问 IRC 或邮件列表:

  • IRC:irc.freenode.net 上的 #ansible
  • 邮件列表: https: //groups.google.com/forum/#!forum/ansible -project

您还可以禁用 _Gathering Facts_,将其放入您的书中

- hosts: anything
  gather_facts: False

@bcoca @sivel有计划重温这个吗? 在我看来,如果/usr/bin/python不可用,Ansible 至少应该尝试使用/usr/bin/python3 (或适当的/usr/bin/python2 )。
@SpamapS报告说,AWS 上的官方 Ubuntu AMI 仅随/usr/bin/python3

ubuntu@ip-172-16-178-247:~$ uname -a
Linux ip-172-16-178-247 4.4.0-1065-aws #75-Ubuntu SMP Fri Aug 10 11:14:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-16-178-247:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:    16.04
Codename:   xenial
ubuntu@ip-172-16-178-247:~$ ls -al /usr/bin |grep python
lrwxrwxrwx  1 root   root          26 May 18  2016 dh_pypy -> ../share/dh-python/dh_pypy
lrwxrwxrwx  1 root   root          29 May 18  2016 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx  1 root   root          23 Nov 28  2017 pdb3.5 -> ../lib/python3.5/pdb.py
lrwxrwxrwx  1 root   root          31 Mar 23  2016 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root   root          26 May 18  2016 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx  1 root   root           9 Mar 23  2016 python3 -> python3.5
-rwxr-xr-x  2 root   root     4464400 Nov 28  2017 python3.5
-rwxr-xr-x  2 root   root     4464400 Nov 28  2017 python3.5m
-rwxr-xr-x  1 root   root         976 Nov 27  2015 python3-jsondiff
-rwxr-xr-x  1 root   root        3662 Nov 27  2015 python3-jsonpatch
-rwxr-xr-x  1 root   root        1342 Oct 24  2015 python3-jsonpointer
lrwxrwxrwx  1 root   root          10 Mar 23  2016 python3m -> python3.5m

对于后代,这是 Ansible 的一个已知改进机会,并且正在考虑将其包含在 >=2.8 的路线图中

就我而言(ansible 2.7.0):
我的IP | 失败的! => {
“改变”:假,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: 没有那个文件或目录\r\n",
"msg": "模块失败\n请参阅 stdout/stderr 了解确切的错误",
“rc”:127
}

$ll |grep 蟒蛇
lrwxrwxrwx 1 root root 32 Jun 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 2016 年 11 月 16 日 34 日 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 根 4864 2014 年 5 月 29 日 python2.6
-rwxr-xr-x 1 root root 1418 2014 年 5 月 29 日 python2.6-config

为什么软链接也不起作用?

就我而言(ansible 2.7.0):
我的IP | 失败的! => {
“改变”:假,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: 没有那个文件或目录\r\n",
"msg": "模块失败\n请参阅 stdout/stderr 了解确切的错误",
“rc”:127
}

$ll |grep 蟒蛇
lrwxrwxrwx 1 root root 32 Jun 5 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 2016 年 11 月 16 日 34 日 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 根 4864 2014 年 5 月 29 日 python2.6
-rwxr-xr-x 1 root root 1418 2014 年 5 月 29 日 python2.6-config

为什么软链接也不起作用?

对不起,是我的错。使用软链接,它有效

一个简单的: ln -s /usr/bin/python3 /usr/bin/python解决了我的问题

只需在您的库存文件中使用ansible_python_interpreter=/usr/bin/python3

谢谢,现在可以用了

这似乎与pyenv pyenv global <version>有问题。

它应该填充它,但我猜 Ansible 是硬编码来查看/usr/bin/python ,而不是仅使用python命令?

如果是这样,这可能会改变吗? 或者有我可以使用的解决方法吗?

如果是这样,这可能会改变吗?

不它不是。

如果要使用/usr/bin/python以外的其他内容,则需要将ansible_python_interpreter显式设置

pyenv的情况下,这可能只是到垫片( which python3.6 )或真正二进制文件( pyenv which python3.6 )的路径。 请注意,在许多情况下,您需要对其进行硬编码并且不能使用 shell 扩展。

此页面是否有帮助?
0 / 5 - 0 等级