我正在使用此代码以编程方式运行ansible:https://github.com/jtyr/ansible-run_playbook带有一个简单的playbook,它只是从Ubuntu服务器收集事实并将它们打印到屏幕上:
- name: Test play
hosts: all
tasks:
- name: Debug task
debug:
msg: "{{hostvars[inventory_hostname]}}"
tags:
- debug
但我真正需要的是简单地将输出保存到python变量中,而不是通过模板运行或输出到屏幕(我实际上将在Django应用程序中使用它)。有没有办法做到这一点?
感谢您的阅读。
答案 0 :(得分:1)
输出始终是stdout。 Runner
类无法更改此行为。我从Can I redirect the stdout in python into some sort of string buffer?得到了一个想法。以下更改将保存mystdout
中的输出。您可以通过调用mystdout.getvalue()
from cStringIO import StringIO
def main():
runner = Runner(
...
# vault_pass='vault_password',
)
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
stats = runner.run()
sys.stdout = old_stdout
print mystdout.getvalue()