passing array as command line argument to python script
Question: I am calling a python script from a ruby program as:

    
    
    sku = ["VLJAI20225", "VJLS1234"]
    qty = ["3", "7"]
    system "python2 /home/nish/stuff/repos/Untitled/voylla_staging_changes/app/models/ReviseItem.py #{sku} #{qtys}"
    

But I'd like to access the array elements in the python script. int the python
script:

    
    
    print sys.argv[1]      
    #gives [VLJAI20225,  expected ["VLJAI20225", "VJLS1234"]
    print sys.argv[2]
    #gives VJLS1234]     expected ["3", "7"]
    

I feel that the space between the array elements is treating the array
elements as separate arguments. I may be wrong. How can I pass the array
correctly. Thanks


Answer: You need to find a suitable protocol to encode your data (your array, list,
whatever) over the interface you've chosen (this much is true pretty general).

In your case, you've chosen as interface the Unix process call mechanism which
allows only passing of a list of strings during calling. This list also is
rather limited (you cannot pass, say, a gigabyte that way), so you might want
to consider passing data via a pipe between the two processes.

Anyway, all you can do is pass bytes, so I propose to encode your data
accordingly, e. g. as a JSON string. That means encode your Ruby array in
JSON, transfer that JSON string, then decode on the Python side the received
JSON string to get a proper Python list again.

This only sketches the approach and reasoning behind it.

Since I'm not fluent in Ruby, I will leave that part to you (see probably
@apneadiving's answer on that), but on the Python side you can use

    
    
    import json
    
    myList = json.loads(s)
    

to convert a JSON string `s` to a Python list `myList`.

