【问题标题】:OSError: [WinError 193] %1 is not a valid Win32 applicationOSError: [WinError 193] %1 不是有效的 Win32 应用程序
【发布时间】:2014-10-28 09:45:57
【问题描述】:

我正在尝试使用子进程从 Python 解释器中调用 Python 文件“hello.py”。但我无法解决此错误。 [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 脚本”吗?

【问题讨论】:

    标签: python subprocess python-3.4


    【解决方案1】:

    我在使用 Python 语言中的 selenium 运行 chrome 驱动程序代码时出现此错误,当我删除当前的 chrome 驱动程序并安装与我的 PC 兼容的最新驱动程序时,该错误已修复,您可以在此 youtube 上获得详细摘要视频

    https://www.youtube.com/watch?v=WnWQgUerR0c

    欢迎。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    【解决方案2】:

    删除所有的python文件夹

    C:/program files/user/AppData/python

    然后它会工作(如果你有 jupyter 错误)。

    【讨论】:

    • C:/program files/user/AppData/python 看起来不像一条存在的路径。你的意思是C:/Users/user/AppData/python
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    我在尝试安装 SpaCy 时遇到此错误。我有 Python 3.7 32 位版本,它不允许我安装 SpaCy。

    首先,我尝试升级到 Python 3.9 64 位版本并卸载了 python 3.7。然后为了保存我的库,我将 python 3.7 版本的站点包复制到 3.9 版本,这在下载 SpaCy 时给了我这个错误。

    虽然lib文件夹有很多错误,但我通过卸载NumPy然后重新安装解决了[OSError: WinError 193]。

    【讨论】:

      【解决方案4】:

      以上所有解决方案都是合乎逻辑的,我认为涵盖了根本原因,但对我来说,以上都不起作用。因此把它放在这里可能对其他人有帮助。

      我的environment 搞砸了。从traceback可以看出,这里涉及到两个python环境:

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

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

      然后它就像魅力一样发挥作用。

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

      【讨论】:

        【解决方案5】:

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

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

        那么我的电脑中只剩下 Anaconda 所以打开了Anaconda,然后对我来说一切正常

        【讨论】:

          【解决方案6】:

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

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

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

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

          然后一切正常。

          【讨论】:

            【解决方案7】:

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

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

            Running External Command

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

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

            【讨论】:

              【解决方案8】:

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

              尝试以下:

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

              【讨论】:

                【解决方案9】:

                我也遇到了同样的问题,并采取了解决此问题的步骤。

                1. 我从系统中删除了不必要的 python 路径,除了 anaconda 路径。
                2. C:\Users\AppData\Roaming = 删除任何不必要的 python 文件/文件夹。这些文件可能会干扰当前的执行。

                问候 Vj

                【讨论】:

                  【解决方案10】:

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

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

                  【讨论】:

                    【解决方案11】:

                    对我来说,经过以下步骤后问题得到了解决:

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

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

                    注意:一旦你安装了 python 32 位变体,不要忘记使用这个新的 python 32 位变体的 pip 安装所有必需的包

                    【讨论】:

                      【解决方案12】:

                      通过pip从命令行/终端卸载numpy为我修复了错误:

                      pip uninstall numpy

                      【讨论】:

                        【解决方案13】:

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

                        这个错误很可能是由于这一行 import subprocess

                        我遇到了同样的问题,并通过卸载并重新安装 python 和 anaconda 解决了这个问题,然后我使用 jupyter 并编写了 pip install numpy 这给了我获取站点包的整个路径我删除了我的站点包文件夹,然后错误消失了。实际上,因为我有 2 个用于站点包的文件夹,一个包含 anaconda,另一个位于应用程序数据中(其中有一些问题),因为我删除了该站点包文件夹,然后它自动开始从站点包文件夹中获取我的库有了anaconda,问题就解决了。

                        【讨论】:

                        • 嗯,不。回溯清楚地表明子流程的导入成功。
                        【解决方案14】:

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

                        【讨论】:

                        • 感谢您提醒我,当subprocess 神秘失败时,shell=True 始终是一个选项!这个问题与我的问题无关(我有一个实际的 Windows 可执行文件,它只是由于某种原因无法运行......如果我使用 32 位或 64 位版本的解释器并不重要),但你的建议使用shell=True 有效!
                        【解决方案15】:

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

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

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

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

                        【讨论】:

                        • "错误很明显。"今天我了解到“清晰”这个词有了新的含义。
                        • 错误信息是 esp。 清楚,因为由于某种原因它无法将%1 解析为hello.py。 IMO 这是 Python 中的一个错误。
                        • @david-heffernan 我对核心 Python / 子进程模块的实现细节知之甚少,无法说出 %1 占位符的来源,以及为什么它没有解析为文件名。但是正如您所说,即使错误出现在 Windows API 中,并且错误消息始终包含未解决的 %1 占位符,如果出现 OSError subprocess.call 可以扫描错误消息以查找 %1 并替换它因此,在将消息提供给异常之前。
                        • @david-heffernan 并不是说​​我认为这个讨论会导致某个地方,但是不,我不一定需要知道 %1 的确切来源才能知道 Python 在位置来修复/改进它。当我说“Python”时,它包括子流程模块。
                        • 我们并不是在抱怨 Python 没有自动填充 %1。我们抱怨您声称“错误很清楚”,而您后来说“并不总是清楚在 %1 中放入什么值”,我们都认为“不清楚”的说法更现实。如果您遗漏了第一句话,或者说“%1 应该是 hello.py,但 Python 因复杂原因无法填写”,则不会出现此评论线程。
                        猜你喜欢
                        • 2020-07-28
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2022-08-10
                        • 2021-05-04
                        • 2020-02-19
                        • 1970-01-01
                        • 2019-09-18
                        相关资源
                        最近更新 更多