using python subprocess call to invoke python script
Question: I have a python script that needs to invoke another python script in the same
directory. I did this:

    
    
        from subprocess import call
        call('somescript.py')
    

I get the following error

    
    
        call('somescript.py')
        File "/usr/lib/python2.6/subprocess.py", line 480, in call
        return Popen(*popenargs, **kwargs).wait()
        File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
        errread, errwrite)
        File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
    

OSError: [Errno 2] No such file or directory

I have the script somescript.py in the same folder though. Am i missing
something here. Thanks


Answer: If 'somescript.py' isn't something you could normally execute directly from
the command line (I.E. `$: somescript.py` works), then you can't call it
directly using call.

Remember that the way Popen works is that the first argument is the program
that it executes, and the rest are the arguments passed to that program. In
this case, the program is actually _python_ , not your script. So the
following will work as you expect:

    
    
    subprocess.call(['python', 'somescript.py', somescript_arg1, somescript_val1,...]).
    

This correctly calls the python interpreter and tells it to execute your
script with the given arguments.

Note that this is different from the above suggestion:

    
    
    subprocess.call(['python somescript.py'])
    

That will try to execute the program called _python somscript.py_ , which
clearly doesn't exist.

    
    
    call('python somescript.py', shell=True)
    

Will also work, but using strings as input to call is not cross platform, is
dangerous if you aren't the one building the string, and should generally be
avoided if at all possible.

