OSError: [WinError 193]% 1 не является допустимым приложением Win32

Я пытаюсь вызвать файл python "hello.py" из интерпретатора python с подпроцессом. Но я не могу разрешить эту ошибку. [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

Также есть альтернативный способ "вызвать python script с аргументами", кроме использования подпроцесса? Спасибо заранее.

Ответ 1

Ошибка довольно ясна. Файл hello.py не является исполняемым файлом. Необходимо указать исполняемый файл:

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

Вам понадобится python.exe, чтобы быть видимым на пути поиска, или вы могли бы передать полный путь к исполняемому файлу, на котором запущен вызывающий script:

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

Ответ 2

Установщики Python обычно регистрируют файлы .py в системе. Если вы запускаете оболочку явно, она работает:

import subprocess
subprocess.call(['hello.py', 'htmlfilename.htm'], shell=True)
# --- or ----
subprocess.call('hello.py htmlfilename.htm', shell=True)

Вы можете проверить свои ассоциации файлов в командной строке с помощью

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*

Ответ 3

Я получил ту же ошибку, когда забыл использовать shell=True в subprocess.call.

subprocess.call('python modify_depth_images.py', shell=True)

Запуск внешней команды

Чтобы запустить внешнюю команду, не взаимодействуя с ней, например, одну будет работать с os.system(), используйте функцию call().

подпроцесс импорта

Простая команда subprocess.call(['ls', '-1'], shell = True)

Ответ 4

OSError: [WinError 193]% 1 не является допустимым приложением Win32

Эта ошибка, скорее всего, связана с подпроцессом импорта этой строки

У меня была та же проблема, и я решил ее, удалив и переустановив python и anaconda, затем я использовал jupyter и написал pip install numpy. Это дало мне полный путь, по которому он получал мои пакеты сайтов, я удалил папку site-packages, а затем ошибка исчезла. На самом деле, поскольку у меня было 2 папки для пакетов сайтов, одна с анакондой, а другая где-то в данных приложения (в которой были некоторые проблемы), так как я удалил эту папку сайта-пакета, он автоматически начал брать мои библиотеки из папки сайта-пакета, которая была с анакондой следовательно проблема была решена.

Ответ 5

Удаление numpy из командной строки/терминала через pip исправило ошибку для меня:

pip uninstall numpy

Ответ 6

Я также испытал эту ошибку. Затем я устанавливаю пакет распространения Visual Studio 2015 по этой ссылке. Задача решена:). Попробуйте, прежде чем делать дальнейшие модификации.