I have 2 scripts a.py
and b.py
.
I have an ansible playbook which runs a.py
and b.py
. Here is the script
Output of a.py
is given to b.py
. The problem is the Ouput of a.py
is a list which can be indexed but whenever I pass the yaml's stdout
to b.py
as command line argument it takes as str
object and it can be indexed as before i.e like a.py
's.
script a.py
a = [{
"name": "jack",
"date": "Jan-06-2021",
"age": "24",
},
{
"name": "jack1",
"date": "Jan-07-2021",
"age": "25",
},
]
print(a)
b.py script
import sys
import json
random_variable = sys.argv[1]
print(json.loads(random_variable)) # tried this no use
I want to parse the values of a
just like random_variab.e[0]
and random_variable[1]
.
random_variable[0]
could be like:
{'name': 'jack', 'date': 'Jan-06-2021', 'age': '24'}
- name: testing
gather_facts: True
hosts: localhost
tasks:
- name: run python script
command: python3 /test-repo/test_python/a.py
register: result
- set_fact:
var1: "{{result.stdout}}"
- debug:
msg: "{{var1}}"
- name: run python script2
command: python3 /test-repo/test_python/b.py {{var1}}
register: result
- debug:
msg: "{{result}}"
Error I am getting now
["Traceback (most recent call last):", " File \"/test-repo/test_python/b.py\", line 4, in <module>", " print(json.loads(a))", " File \"/usr/lib64/python3.6/json/__init__.py\", line 354, in loads", " return _default_decoder.decode(s)", "
File \"/usr/lib64/python3.6/json/decoder.py\", line 339, in decode", " obj, end = self.raw_decode(s, idx=_w(s, 0).end())", " File
\"/usr/lib64/python3.6/json/decoder.py\", line 355, in raw_decode", " obj, end = self.scan_once(s, idx)", "json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)"]
Expected output when I print
random_variable = sys.argv[1]
print(random_variable[0])
Output I need
{'name': 'jack', 'date': 'Jan-06-2021', 'age': '24'}