Search code examples
pythonsubprocesspython-3.4

OSError: [WinError 193] %1 is not a valid Win32 application


I am trying to call a Python file "hello.py" from within the python interpreter with subprocess. But I am unable to resolve this error. [Python 3.4.1].

import subprocess    
subprocess.call(['hello.py', 'htmlfilename.htm'])
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    subprocess.call(['hello.py', 'htmlfilename.htm'])
  File "C:\Python34\lib\subprocess.py", line 537, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Python34\lib\subprocess.py", line 858, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child
    startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application

Also is there any alternate way to "call a python script with arguments" other than using subprocess?


Solution

  • %1 refers to the first argument of the command, for some reason it was not replaced with hello.py. The file hello.py is not an executable file. You need to specify the executable:

    subprocess.call(['python.exe', 'hello.py', 'htmlfilename.htm'])
    

    You'll need python.exe to be visible on the search path, or you could pass the full path to the executable file that is running the calling script:

    import sys
    subprocess.call([sys.executable, 'hello.py', 'htmlfilename.htm'])