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

时间:2014-09-03 19:12:23

标签: python subprocess python-3.4

我正在尝试调用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脚本&#34;除了使用子进程? 提前谢谢。

13 个答案:

答案 0 :(得分:25)

错误很清楚。文件hello.py不是可执行文件。您需要指定可执行文件:

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

您需要在搜索路径上显示python.exe,或者您可以将完整路径传递给运行调用脚本的可执行文件:

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

答案 1 :(得分:7)

Python安装程序通常会在系统中注册.py文件。如果你明确地运行shell,它可以工作:

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

答案 2 :(得分:2)

以上所有解决方案都是合乎逻辑的,我认为这涵盖了根本原因,但是对我而言,以上所有方法均无效。因此,将其放在此处可能对其他人有帮助。

我的environment被搞砸了。从回溯中可以看到,这里涉及两个python环境:

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

我清理了路径,只是删除了C:\Users\example\AppData\Roaming\Python\Python37中的所有文件。

然后它就像魅力一样工作。

我希望其他人能对此有所帮助。

这个link帮助我找到了解决方案。

答案 3 :(得分:1)

我在shell=True忘记使用subprocess.call时收到同样的错误。

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

Running External Command

     

运行外部命令而不与其交互,例如一个   可以使用os.system(),使用call()函数。

     

导入子流程

     

简单命令subprocess.call(['ls',' - 1'],shell = True)

答案 4 :(得分:1)

对我来说,按照以下步骤解决了问题:

  1. 在Windows上安装python 32位版本。
  2. 添加新安装的python及其脚本文件夹(pip驻留在环境变量中)

当您要运行的任何应用程序都需要python 32位变体并且您具有64位变体时,就会出现问题

注意:安装python 32位变体后,请不要忘记使用此新python 32位变体的pip安装所有必需的软件包

答案 5 :(得分:0)

我也遇到了这个错误。 然后,我通过此链接安装Visual Studio 2015 Redistribution package。问题解决了:)。在进行进一步修改之前,请尝试一下。

答案 6 :(得分:0)

操作系统错误:[WinError 193]%1不是有效的Win32应用程序

此错误很可能是由于此行 import子进程

我遇到了同样的问题,并通过卸载并重新安装python和anaconda来解决了该问题,然后我使用了jupyter并写了 pip install numpy ,这为我提供了从中获取网站软件包的完整路径我删除了我的site-packages文件夹,然后错误消失了。实际上,因为我有2个用于站点包的文件夹,其中一个带有anaconda,而另一个位于应用程序数据中的某个位置(其中存在一些问题),因为我删除了该站点包文件夹,所以它自动开始从站点包文件夹中提取我的库使用Anaconda可以解决问题。

答案 7 :(得分:0)

从命令行/终端通过numpy卸载pip可以解决我的错误:

pip uninstall numpy

答案 8 :(得分:0)

我通过以下步骤解决了这个问题:

  • 1>卸载的python
  • 2>从C /程序文件/和user / sukhendra / AppData中删除了Python37文件夹
  • 3>删除了所有python37路径

然后只有Anaconda保留在我的PC中 所以打开Anaconda,然后一切对我来说都很好

答案 9 :(得分:0)

对于更新后在Windows上遇到此问题的人

发生的事情是Windows Defender进行了一些更改。可能导致运行数据提取脚本,但是该项目的python.exe减少为0kb。从另一个项目复制python.exe并将其替换目前已解决。

答案 10 :(得分:0)

我也面临着同样的问题,并且在解决该问题时也遵循以下步骤。

  1. 我从系统中删除了不必要的python路径(anaconda路径除外)。
  2. C:\ Users <用户名> \ AppData \ Roaming =删除所有不必要的python文件/文件夹。这些文件可能会干扰当前执行。

问候 Vj

答案 11 :(得分:0)

文件 hello.py 不是可执行文件。你需要指定一个像python.exe这样的文件

尝试以下操作:

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

答案 12 :(得分:0)

我的问题涉及 poetryargparse。 我用这样的参数调用脚本:

poetry run .\src\script.py --help

并得到同样的错误,所以当我将命令更改为:

poetry run python.exe .\src\script.py --help

然后一切正常。