Passing List of Objects in Command Line Python - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Passing List of Objects in Command Line Python (/thread-29957.html) |
Passing List of Objects in Command Line Python - usman - Sep-27-2020 I am trying to pass a argument to command line for running a python program which takes list of Field Objects and send an email. The program is running fine when the list of objects is already set in my program. a=[{"name": "productname_0", "type": "html", "content": "A Cool Shirt"}, {"name": "productname_1", "type": "html", "content": "Some Nice Shoes"}, {"name": "productname_2", "type": "html", "content": "A Trendy Hat"}, {"name": "productprice_0", "type": "html", "content": "20.99"}, {"name": "productprice_1", "type": "html", "content": "50.99"}, {"name": "productprice_2", "type": "html", "content": "FREE"}] sendmail(a)But when I pass this list in command line ,it did not work for me. a = json.loads(sys.argv[1]) sendmail(a)Running Program from Command Line mailscript.py '[{"name": "productname_0", "type": "html", "content": "A Cool Shirt"}, {"name": "productname_1", "type": "html", "content": "Some Nice Shoes"}, {"name": "productname_2", "type": "html", "content": "A Trendy Hat"}, {"name": "productprice_0", "type": "html", "content": "20.99"}, {"name": "productprice_1", "type": "html", "content": "50.99"}, {"name": "productprice_2", "type": "html", "content": "FREE"}]'Error : json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) Python Version :3.8.5 RE: Passing List of Objects in Command Line Python - ndc85430 - Sep-27-2020 Show us how you're passing the JSON on the command line and tell us which OS you're using. You possibly need to quote it or something. RE: Passing List of Objects in Command Line Python - usman - Sep-27-2020 I have a added a Single Quote but it also did not work. I am using Windows RE: Passing List of Objects in Command Line Python - ndc85430 - Sep-27-2020 Apologies; I didn't read your post properly. Hmm, I'm not sure about Windows I'm afraid. Perhaps look up how you're meant to quote things on the command line there. RE: Passing List of Objects in Command Line Python - snippsat - Sep-27-2020 Have to do some converting stuff for this to work,there is no easy fix with quotes or anything else. Prepare command to use in command line. lst = [{"name": "productname_0", "type": "html", "content": "A Cool Shirt"}] command_lst = list(lst[0].items()) print(f'"{command_lst}"')
# sys_a.py import sys, ast import json arg_command = sys.argv[1] a_eval = ast.literal_eval(arg_command) d_arg = dict(a_eval) lst = [] lst.append(d_arg) print(lst) # Test json j = json.dumps(lst) # print(j) load_j = json.loads(j) print(load_j)Test command line:
RE: Passing List of Objects in Command Line Python - usman - Sep-27-2020 Thanks for the reply, What should I do for multiple JSON objects for productname_1,product_name2? RE: Passing List of Objects in Command Line Python - snippsat - Sep-27-2020 I will be like this,not so easy to pass all this trough command line Windows. There may be a better way if i had use Click,and maybe pass a file object instead. Make argument lst = [{"name": "productname_0", "type": "html", "content": "A Cool Shirt"}, {"name": "productname_1", "type": "html", "content": "Some Nice Shoes"}, {"name": "productname_2", "type": "html", "content": "A Trendy Hat"}, {"name": "productprice_0", "type": "html", "content": "20.99"}, {"name": "productprice_1", "type": "html", "content": "50.99"}, {"name": "productprice_2", "type": "html", "content": "FREE"}] command_lst = [] for index,item in enumerate(lst): command_lst.append(list(lst[index].items())) print(f'"{command_lst}"') # command_arg.py import sys, ast import json from pprint import pprint arg_command = sys.argv[1] a_eval = ast.literal_eval(arg_command) lst = [] for i in a_eval: d_arg = dict(i) lst.append(d_arg) print(lst) # Test json j = json.dumps(lst) # print(j) load_j = json.loads(j) pprint(load_j)Command line:
RE: Passing List of Objects in Command Line Python - ndc85430 - Sep-27-2020 That isn't valid JSON though. I'd be very surprised if you couldn't escape quotes in Windows to let you do what you want. Then again, I'm not a Windows user, so.. |