资讯动态

怎样用cmd命令行运行Python文件

发布时间:2026/10/30 2:53:23 来源:尧图企业网站定制
前言在 Windows 上用cmd命令提示符跑一个.py文件理论上只有一条命令python 文件名.py。但实际操作里新手遇到最多的报错是这三类python 不是内部或外部命令、python: cant open file xxx.py: [Errno 2] No such file or directory以及能跑但中文输出变成乱码。这三类分别对应环境变量没配、工作目录不对、控制台编码不匹配跟 Python 本身没关系纯属命令行的使用问题。还有一个容易被忽略的现状Windows 10/11 上如果你从微软应用商店装过 Python系统里会有一个占位符式的python.exe。没装真解释器时执行python会直接跳转到应用商店而不是报找不到命令。所以看到跳商店不要以为是自己命令写错了。本文按确认解释器 → 定位文件 → 运行 → 处理编码与参数的顺序讲全部命令都在cmd下执行覆盖最常踩的坑。一、先确认解释器能不能被找到cmd只会在环境变量Path列出的目录里找可执行文件。装 Python 时如果没勾选Add Python to PATHpython就不在Path里于是报不是内部或外部命令。C:\ python --versionPython 3.12.4C:\ where pythonC:\Users\me\AppData\Local\Programs\Python\Python312\python.exewhere是cmd自带的查找命令它会列出所有匹配到的可执行文件路径。如果输出里第一条是C:\Users\...\AppData\Local\Microsoft\WindowsApps\python.exe那基本就是商店占位符说明真解释器没配好。此时有三种解法重新运行安装包并勾选加入 PATH用官方推荐的内置启动器py或者敲绝对路径直接调用。py是 Windows 自带的 Python 启动器launcher它不在Path里靠python.exe而是靠独立的py.exe能按版本挑选解释器C:\ py --versionPython 3.12.4C:\ py -3.11 script.py注意py是Windows 平台专属Linux/macOS 上没有这个命令。所以写教程或脚本时跨平台的说法应该统一用python只在 Windows 场景下才提py。二、工作目录必须对路径要用对找不到文件几乎都是当前工作目录cwd不对。cmd里先cd到脚本所在目录再执行最短路径最不容易出错。C:\ cd /d D:\work\demoD:\work\demo python hello.pyHello, worldcd /d里的/d很重要不加/d时cd不能跨盘符切换cd D:\work在 C 盘还停留在原地命令会默默无效。加上/d才能连盘符一起切。路径里如果含空格必须加引号python D:\my project\main.py。也可以不切换目录直接给绝对路径python D:\work\demo\hello.py——此时当前工作目录仍是原来的脚本里用相对路径打开文件会以原目录为基准这是另一个常见困惑点。三、编码中文乱码的根源cmd默认代码页在中文 Windows 上是936GBK。当脚本里print输出 UTF-8 中文而控制台按 GBK 解码就会显示成乱码。两种处理方式。第一种把控制台切到 UTF-8 代码页D:\work\demo chcp 65001Active code page: 65001D:\work\demo python hello.pychcp只影响当前这个cmd窗口关掉即失效。第二种更推荐在脚本里对所有文件读写显式指定encodingutf-8这样输出内容本身是确定的不至于因为环境不同而变形。注意print的输出编码取决于sys.stdout.encoding跟open()的默认编码是两回事但对 Windows 来说都受代码页影响。# 适用于 Python 3.8with open(data.txt, r, encodingutf-8) as f:for line in f:print(line.rstrip(\n))如果希望输出立刻刷到屏幕尤其是被重定向到文件或管道时可以加-u让标准流不缓冲D:\work\demo python -u long_task.py也可以用环境变量PYTHONIOENCODING指定标准流编码这在把输出重定向到文件时特别有用D:\work\demo set PYTHONIOENCODINGutf-8D:\work\demo python hello.py out.txtset只在当前cmd窗口有效要永久生效得用setx写进用户环境变量但新开的窗口才读得到。PYTHONIOENCODING影响的是sys.stdin/sys.stdout/sys.stderr和open()的默认编码是两条独立的线索排查乱码时要分清楚是哪一条在起作用。顺便说一个排查工具在脚本里打印sys.stdout.encoding就能直接看到当前控制台把输出当什么编码解释。# 适用于 Python 3.8import sysprint(stdout 编码:, sys.stdout.encoding)print(default 编码:, sys.getdefaultencoding())sys.getdefaultencoding()通常是utf-8这是 Python 内部字符串与字节之间的默认转换而sys.stdout.encoding在中文cmd未切换代码页时往往显示cp936两者不一样才是乱码现场的真相。四、传参数、走模块、激活虚拟环境脚本要接收参数时用sys.argv可选搭配argparse。命令行的空格是分隔符所以带空格的参数要加引号。# 适用于 Python 3.8import sysprint(脚本名:, sys.argv[0])print(参数:, sys.argv[1:])D:\work\demo python args_demo.py hello two words 3脚本名: args_demo.py参数: [hello, two words, 3]注意sys.argv里的元素全是字符串3不会自动变成整数3需要自己int()转换。如果项目组织成包要跑包里的子模块用-m而不是给文件路径D:\work\demo python -m mypkg.main-m会以模块方式加载好处是包的相对导入能正常工作sys.path的第一项也会变成当前目录。进入虚拟环境后python指向的就是虚拟环境里的解释器Windows 上是Scripts\python.exeD:\work\demo .venv\Scripts\activate.bat(.venv) D:\work\demo python --versioncmd下激活脚本是.bat如果用的是 PowerShell则要执行.venv\Scripts\Activate.ps1两者不能混用。最后是跑完了没有、跑成功了没有。cmd里%errorlevel%保存上一条命令的退出码Python 进程正常结束是0脚本里sys.exit(1)或未捕获异常都会得到非零值。把它接进批处理脚本是让自动化流程能判断成败的标准做法。D:\work\demo python check.pyD:\work\demo echo %errorlevel%0如果脚本里有未捕获的异常Python 会把 traceback 打到标准错误stderr并以非零码退出。用2 err.txt可以把错误单独重定向出去D:\work\demo python check.py out.txt 2 err.txt覆盖写追加写2管的是 stderr21表示把 stderr 并到 stdout 一起走。这套重定向语法是cmd自己的跟 Python 无关但排查为什么日志文件是空的时经常用到。场景命令运行脚本python hello.py跨盘切目录cd /d D:\work\demo查看解释器位置where python指定版本py -3.11 script.py切控制台编码chcp 65001关闭缓冲python -u script.py跑包内模块python -m mypkg.main激活虚拟环境.venv\Scripts\activate.bat常见坑点❌python hello.py报不是内部或外部命令✅ 解释器目录没进Path用where python确认或用py hello.py或重新安装时勾选加入 PATH❌cd D:\work\demo后还在原盘以为切过去了✅ 跨盘符切换必须cd /d D:\work\demo❌ 在别的目录里执行python hello.py报找不到文件✅python后面给的是相对当前工作目录的路径要么先cd要么写绝对路径❌ 路径含空格不加引号✅python D:\my project\main.py否则参数会被拆成两半❌ 用脚本里相对路径读文件时忘了当前工作目录可能不是脚本目录✅ 用绝对路径或以Path(__file__).parent为基准拼路径❌ 输出中文乱码就以为是 Python 的问题✅ 是控制台代码页与输出编码不匹配chcp 65001临时解决读写文件时显式encodingutf-8才是根治❌ 以为sys.argv里的数字是数字✅ 全是字符串需要自己转换转换前最好用argparse做类型与校验❌ 在cmd里执行 PowerShell 的Activate.ps1✅ 匹配 shellcmd用activate.batPowerShell 用Activate.ps1总结报错真正原因处理不是内部或外部命令Path里没有 python配 PATH 或改用pycant open file工作目录不对cd /d到脚本目录中文乱码控制台代码页不匹配chcp 65001读写显式指定编码命令行运行 Python 的全部麻烦本质上都是解释器在哪、文件在哪、输出用什么编码这三个定位问题。把where python、cd /d、chcp 65001三招记住绝大多数启动类报错都能当场定位。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑