web-dev-qa-db-ja.com

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スクリプトを引数付きで呼び出す」別の方法がありますか?事前に感謝します。

30
Caxton

エラーはかなり明確です。ファイル hello.pyは実行可能ファイルではありません。実行可能ファイルを指定する必要があります。

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

あなたは必要になるでしょう python.exeを検索パスに表示するか、呼び出し元のスクリプトを実行している実行可能ファイルにフルパスを渡すことができます。

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

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" %*
8
tdelaney

Shell=Truesubprocess.callを使用するのを忘れていたときに、同じエラーが発生しました。

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

外部コマンドの実行

Os.system()を使用するなど、外部コマンドと対話せずに外部コマンドを実行するには、call()関数を使用します。

サブプロセスのインポート

単純なコマンドsubprocess.call(['ls'、 '-1']、Shell = True)

1
Mona Jalal

OSError:[WinError 193]%1は有効なWin32アプリケーションではありません

このエラーは、おそらく次の行によるものですimport subprocess

私は同じ問題を抱えていて、アンインストールして再インストールすることで解決しましたpython and anaconda then jupyterを使用してpip install numpyサイトパッケージを削除すると、サイトパッケージフォルダーが削除され、エラーが消えました。実際には、サイトパッケージ用に2つのフォルダーがあり、1つはanacondaとアプリデータのどこかに問題がありました。そのサイトパッケージフォルダーは、anacondaにあったサイトパッケージフォルダーからライブラリを自動的に取得し始めたため、問題は解決しました。

0