在ansible中使用shell运行python脚本,但似乎无法使用print()输出标准输出
我的剧本中有一些类似上面的代码片段。在python脚本中,我使用了print语句。但当我运行并使用debug时,stdout是空的。对于调试,我尝试了以下两种方法-在ansible中使用shell运行python脚本,但似乎无法使用print()输出标准输出,python,ansible,Python,Ansible,我的剧本中有一些类似上面的代码片段。在python脚本中,我使用了print语句。但当我运行并使用debug时,stdout是空的。对于调试,我尝试了以下两种方法- shell: sleep 5; nohup python /tmp/rsync.py {{check}} {{source}} {{destination}} {{dest_host}} & register: status failed_when: "'FAILED' in status.stdout" 为了
shell: sleep 5; nohup python /tmp/rsync.py {{check}} {{source}} {{destination}} {{dest_host}} &
register: status
failed_when: "'FAILED' in status.stdout"
为了打印到标准输出,我还使用了sys.stdout.write
。即使这样似乎也不起作用。
实现了我需要的一切。只是这不起作用。编辑:我必须在后台运行它。有什么新的方法来处理这个问题吗?使用Ansible提供的异步支持 根据shell命令执行所需的时间调整async的值(如果是5秒,则使async略高于5秒) 根据要检查shell是否完成执行的频率调整轮询值
- name: debug
debug: msg={{ status.stdout }}
我的输出如下所示<代码>确定:[target1]=>{“status.stdout_line”:[]}是否设置了
导出PYTHONUNBUFFERED=1
环境变量?使用-vvvv重新运行代码,并检查shell模块是否输出。里面会有一些标准的台词。检查它是否为空?由于您在后台运行脚本,我可以想象Ansible在Python脚本本身实际打印某些内容时已经超过了状态。stdout
部分,因此Ansible没有看到任何输出。您是否尝试过不在后台运行脚本?我没有设置任何环境变量。使用VVV打印空行。在后台运行是可行的。但我必须在BG模式下运行它。关于如何实现这一点,您有什么想法吗?与我使用和在后台模式下运行它相比,它是否会造成任何差异。因为在后台运行它是必要的。不过我会尝试一下。在这两种情况下,Ansible都使用subprocess.Popen()运行shell命令。Async只提供取消阻止任务并继续或等待作业完成等功能。
- name: debug
debug: msg={{ status.stdout }}
- name: Execute shell
shell: sleep 5; nohup python /tmp/rsync.py {{check}} {{source}} {{destination}} {{dest_host}}
async: 100
poll: 1
register: status
failed_when: "'FAILED' in status.stdout"