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 по этой ссылке. Задача решена:). Попробуйте, прежде чем делать дальнейшие модификации.