OSError: [WinError 193] %1 不是有效的 Win32 应用程序

82 投票
14 回答
255167 浏览
提问于 2025-04-19 16:02

我想在Python解释器里面用subprocess来调用一个叫“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脚本”,而不是使用subprocess?

14 个回答

2

对我来说,问题解决的步骤如下:

  1. 在Windows上安装32位的Python版本。
  2. 把新安装的Python和它的脚本文件夹(也就是pip所在的地方)添加到环境变量中。

问题出现的原因是,当你想运行的某个应用需要32位的Python版本,而你却安装了64位的版本。

注意:安装完32位的Python后,别忘了用这个新安装的32位Python的pip来安装所有需要的包。

10

以上的解决方案都很有道理,我觉得它们都抓住了问题的根本原因,但对我来说,以上的方法都没有用。所以我把我的经历分享出来,希望能对其他人有帮助。

我的 环境 出现了问题。从错误信息中可以看到,这里涉及到两个 Python 环境:

  1. C:\Users\example\AppData\Roaming\Python\Python37
  2. C:\Users\example\Anaconda3

我清理了一下路径,直接把 C:\Users\example\AppData\Roaming\Python\Python37 里的所有文件都删掉了。

然后一切就正常了。

这个 链接 帮助我找到了这个解决办法。

16

我遇到了同样的错误,因为我在使用 subprocess.call 时忘记加 shell=True

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

运行外部命令

如果你想运行一个外部命令,但不想和它互动,就像用 os.system() 一样,可以使用 call() 函数。

import subprocess

#Simple command 
subprocess.call(['ls', '-1'], shell=True)

shell 参数设置为真值会让 subprocess 启动一个中间的 shell 进程,然后让它去执行这个命令。默认情况下,它是直接运行命令的。

 import subprocess

 # Command with shell expansion
 subprocess.call('echo $HOME', shell=True)
20

Python的安装程序通常会把.py文件和系统进行关联,也就是说,系统会知道.py文件是用Python来运行的。如果你直接在命令行中运行Python的命令,它就能正常工作:

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" %*
59

这个错误很明显。文件 hello.py 不是一个可执行文件。你需要指定一个可执行的文件:

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

你需要确保 python.exe 在搜索路径中可见,或者你可以直接提供运行这个脚本的可执行文件的完整路径:

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

撰写回答