Python: subprocess call with shell=False not working
Question: I am using Python script to invoke a Java virtual machine. The following
command works:

    
    
    subprocess.call(["./rvm"], shell=False)  # works
    subprocess.call(["./rvm xyz"], shell=True) # works
    

But,

    
    
    subprocess.call(["./rvm xyz"], shell=False) # not working
    

does not work. [Python
documentation](https://docs.python.org/2/library/subprocess.html) advices to
avoid `shell=True`.


Answer: You need to split the commands into separate strings:

    
    
    subprocess.call(["./rvm", "xyz"], shell=False)
    

A string will work when `shell=True` but you need a list of args when
`shell=False`

The [shlex](https://docs.python.org/2/library/shlex.html) module is useful
more so for more complicated commands and dealing with input but good to learn
about:

    
    
    import shlex
    
    cmd = "python  foo.py"
    subprocess.call(shlex.split(cmd), shell=False)
    

[shlex tut](http://pymotw.com/2/shlex/)

