Using subprocess to run Python script on Windows
Question: Is there a simple way to run a Python script on Windows/Linux/OS X?

On the latter two, `subprocess.Popen("/the/script.py")` works, but on Windows
I get the following error:

    
    
    Traceback (most recent call last):
      File "test_functional.py", line 91, in test_functional
        log = tvnamerifiy(tmp)
      File "test_functional.py", line 49, in tvnamerifiy
        stdout = PIPE
      File "C:\Python26\lib\subprocess.py", line 595, in __init__
        errread, errwrite)
      File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
        startupinfo)
    WindowsError: [Error 193] %1 is not a valid Win32 application
    

* * *

> _[monkut's](http://stackoverflow.com/users/24718/monkut) comment_: The use
> case isn't clear. Why use subprocess to run a python script? Is there
> something preventing you from importing the script and calling the necessary
> function?

I was writing a quick script to test the overall functionality of a Python-
command-line tool (to test it on various platforms). Basically it had to
create a bunch of files in a temp folder, run the script on this and check the
files were renamed correctly.

I could have imported the script and called the function, but since it relies
on `sys.argv` and uses `sys.exit()`, I would have needed to do something
like..

    
    
    import sys
    import tvnamer
    sys.argv.append("-b", "/the/folder")
    try:
        tvnamer.main()
    except BaseException, errormsg:
        print type(errormsg)
    

Also, I wanted to capture the stdout and stderr for debugging incase something
went wrong.

Of course a better way would be to write the script in more unit-testable way,
but the script is basically "done" and I'm doing a final batch of testing
before doing a "1.0" release (after which I'm going to do a
rewrite/restructure, which will be far tidier and more testable)

Basically, it was much easier to simply run the script as a process, after
finding the `sys.executable` variable. I would have written it as a shell-
script, but that wouldn't have been cross-platform. The final script can be
found
[here](http://github.com/dbr/tvdb%5Fapi/blob/c8d7b356cd1a7bb2ab22b510ea74e03a7d27fad6/tests/test%5Ffunctional.py)


Answer: Just found `sys.executable` \- the full path to the current Python executable,
which can be used to run the script (instead of relying on the shbang, which
obviously doesn't work on Windows)

    
    
    import sys
    import subprocess
    
    theproc = subprocess.Popen([sys.executable, "myscript.py"])
    theproc.communicate()
    

