我想在受管节点上使用带有Ansible的python 3.6(我想控制节点可以使用任何东西)。
在其official doc上,它说要在受管节点上启用python 3.6,我必须将ansible_python_interpreter
配置选项设置为/usr/bin/python3
。此选项是inventory option
。我知道即使使用动态广告资源也可以设置此广告资源变量,但是我只是不希望设置变量那么复杂。
所以我没有设置此选项,而是:
ec2_module
自动设置aws ec2 ubuntu18.04(/usr/bin/python3
上的python 3.6附带)(如果不存在,我也可以使用raw
模块来安装它) raw
模块创建从/usr/bin/python
到/usr/bin/python3
的符号链接我尝试过,并且似乎只要将/usr/bin/python
设置为可接受的python版本(>= 2.7
或>= 3.6
),它就应该可以工作...
问题:那么将ansible_python_interpreter配置选项设置为/usr/bin/python3
有什么意义?
答案 0 :(得分:0)
问题:那么将ansible_python_interpreter配置选项设置为/ usr / bin / python3有什么意义?
默认情况下,Ansible将始终在远程系统上使用/usr/bin/python
。如果希望使用ansible_python_interpreter
来代替 /usr/bin/python
,请设置/usr/bin/python
。当然,您可以创建一个符号链接,但是:
/usr/bin/python
已经存在并且是Python 2,并且是系统工具所必需的。更换它会损坏东西。/usr/bin/python3
到/usr/bin/python
的符号链接,您也有可能破坏了所有希望#!/usr/bin/env python3.6
import glob
import asyncio
async def run(shell_command):
p = await asyncio.create_subprocess_shell(shell_command)
await p.communicate()
async def main(shell_commands):
for f in asyncio.as_completed([run(c) for c in shell_commands]):
await f
commands = []
for i in (glob.glob("PATH/SUB/*.csv")):
file = i.split('\\')[1]
commands.append("scrapy crawl quotes -a file=%s -o /OUTPUT/%s.csv &" % (file, file))
loop = asyncio.ProactorEventLoop()
loop.run_until_complete(main(commands))
loop.close()
为Python 2的内容。那可能现在不会咬你,但将来可能会让你感到惊讶。