You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用subprocess调用Python文件出现WinError 193错误求助

问题解答:subprocess调用Python脚本报错WinError 193

问题背景

此前已针对项目结构相关问题提问,现尝试用subprocess多次调用目标Python文件时,在Windows系统的VSCode(Python 3.10.6)中执行代码报错。

原代码

import subprocess
f = open("readme_files/index.txt")
p = open("readme_files/projects.txt")

print(f.read())

func = 0
while True:
    func = int(input("Requested Operation: "))

    if func == 0:
        print(p.read())
    elif func == 1:
        subprocess.run("projects/dice_app.py")
        break
    elif func == 2:
        subprocess.run("projects/text_to_math.py")
        break
    else:
        req_op = ''
        print("Invalid operation. Please try again.")

错误信息

File "[my user directory]\Python Projects\start_here.py", line 14, in <module>
    subprocess.run("projects/dice_app.py")
File "C:\Program Files\Python310\lib\subprocess.py", line 501, in run
    with Popen(*popenargs, **kwargs) as process:
File "C:\Program Files\Python310\lib\subprocess.py", line 969, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\Python310\lib\subprocess.py", line 1438, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 is not a valid Win32 application

错误原因

Windows系统中,.py文件本身不是可执行程序(不像Linux脚本加shebang后可直接运行),subprocess.run()默认会把传入的路径当作可执行文件启动,但系统无法直接识别并运行.py文件,因此抛出"不是有效的Win32应用程序"错误。

subprocess工作原理

subprocess模块的核心是创建新进程执行外部命令或程序。它需要明确知道可执行程序的路径,对于.py这类脚本文件,必须指定对应的Python解释器来加载并执行脚本内容,不能直接传入脚本路径。

解决方案

1. 明确指定Python解释器调用脚本

将subprocess.run()的参数改为列表形式,第一个元素用sys.executable获取当前环境的Python解释器路径(避免环境冲突),第二个元素是脚本路径。

修正后的代码:

import subprocess
import sys  # 导入sys模块
f = open("readme_files/index.txt")
p = open("readme_files/projects.txt")

print(f.read())

func = 0
while True:
    func = int(input("Requested Operation: "))

    if func == 0:
        print(p.read())
    elif func == 1:
        # 使用当前环境的Python解释器执行脚本
        subprocess.run([sys.executable, "projects/dice_app.py"])
        break
    elif func == 2:
        subprocess.run([sys.executable, "projects/text_to_math.py"])
        break
    else:
        req_op = ''
        print("Invalid operation. Please try again.")

2. 额外注意事项

  • 若脚本用相对路径,确保当前工作目录是项目根目录(VSCode默认以项目文件夹为工作目录,不确定可打印os.getcwd()查看);
  • 若使用虚拟环境,sys.executable会自动指向虚拟环境中的python.exe,无需手动修改路径。

内容的提问来源于stack exchange,提问作者Coder man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:09:31