让subprocess正确格式化

时间:2018-01-12 21:45:23

标签: python subprocess

我正在尝试在python脚本末尾的子进程中执行ansible-playbook推荐,在启动正确的命令之前执行'magic'。

如果你不熟悉ansible-playbook。输出通常是彩色的(绿色/黄色/红色文本)并且间隔正确。

如果python刚刚启动命令并在需要时退出,我会没事的。

命令完成后,我目前得到的是黑白文字。

我希望实时获得正常的颜色输出,就像我从命令行运行ansible-playbook一样。有没有办法做到这一点?

我目前的代码如下:

command = '{0} --flush-cache -f 20 -i {1}/dyn_inv.py --extra-vars @{2}/vars.json {3}'.format(ansible_playbook_loc, script_path, var_path, args.playbook[0])
print command
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
devices = process.communicate()[0].rstrip('\n').split()
print devices

1 个答案:

答案 0 :(得分:2)

默认情况下,Ansible只会在输出连接到终端时为文本着色。您可以通过在环境中设置ANSIBLE_FORCE_COLOR=1来强制它使用颜色代码。例如:

import os
os.environ['ANSIBLE_FORCE_COLOR'] = '1'

您可以通过在ansible.cfg中设置force_color选项来完成相同的操作。