Command passes, but why is result in stderr and not stdout?

I have the following simple task to check my Python version

`

  • name: Check if Python version matches target

commadn: “/local/python/bin/python --version”
register: python_ver_check

  • debug: var=python_ver_check

`

and I get

`
TASK [python3 : debug] *********************************************************
ok: [localhost] => {
“python_ver_check”: {
“changed”: true,
“cmd”: “/local/python/bin/python --version”,
“delta”: “0:00:00.003369”,
“end”: “2017-10-31 14:00:10.701899”,
“failed”: false,
“rc”: 0,
“start”: “2017-10-31 14:00:10.698530”,
“stderr”: “Python 2.7.14”,
“stderr_lines”: [
“Python 2.7.14”
],
“stdout”: “”,
“stdout_lines”:
}
}

`

Why stderr and not stdout? The task executed with no errors.

That is where python has decided the version output should go. It is specifically sent to stderr by the python binary.

Also, fwiw, look at the ansible_python or ansible_python_version variables created during fact gathering, that may be useful to you.

Thanks!

How do I force Ansible to use a certain version of Python? Is it in the ansible.cfg file? For example, I see via “ansible --version” command that it’s using /usr/local/bin/python v2.6.6, but I want it to use /local/python/bin/python v2.7.x for example?