You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python调用命令行无窗口显示及subprocess调用bat报错求助

两个问题的解决方案:看不到CMD窗口 & BAT文件启动失败

问题1:为什么os.system('cmd')看不到独立的CMD窗口?

这是因为在PyCharm中运行Python脚本时,os.system()会把命令绑定到当前Python进程的控制台(也就是PyCharm的Run窗口)执行,不会新开独立窗口。它本质是在现有终端会话里启动了一个子shell,所以你只能在PyCharm的控制台里看到CMD的输出,看不到单独的弹窗。

要新开独立的CMD窗口,你需要用Windows自带的start命令,它的作用就是创建新窗口运行指定程序。修改代码如下:

import os
os.system('start cmd')

如果还想在新窗口里执行特定命令(比如直接进入目标目录),可以加上参数:

os.system('start cmd /k cd C:\\blabla\\tmp')

这里/k表示执行命令后保持窗口打开,换成/c的话,命令执行完窗口会自动关闭。

问题2:subprocess启动BAT文件报错FileNotFoundError

这个报错的核心原因是:默认情况下subprocess.Popen()不会自动调用Windows的CMD解释器来执行BAT文件——BAT是脚本文件,本身不能直接作为可执行程序运行,必须通过cmd.exe /c来调用它。

你有两种可行的解决方案:

方案1:显式调用CMD执行BAT

把命令改成传入CMD的路径和参数,明确指定要执行的BAT文件:

import subprocess
p = subprocess.Popen(['cmd', '/c', 'start_appium.bat'], cwd=r"C:\tmp\scripts")
# 注意:Appium服务器是持续运行的常驻进程,调用p.communicate()会让脚本一直阻塞等待进程结束
# 如果你不需要获取输出,直接去掉communicate()即可让Appium后台运行

方案2:设置shell=True

开启shell=True后,subprocess会自动用系统默认shell(Windows下就是CMD)解析命令,这样直接写BAT文件名就能运行:

import subprocess
p = subprocess.Popen("start_appium.bat", cwd=r"C:\tmp\scripts", shell=True)
# 同样,若无需等待Appium终止,不要调用p.communicate()

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

火山引擎 最新活动