Windows10系统PyCharm调用subprocess执行命令报错,VS Code可正常运行
问题根因
- Windows原生没有内置
pwd、sed这类Unix命令,echo属于cmd的内置命令,subprocess默认执行逻辑是直接查找可执行文件,不通过shell解析命令字符串,所以直接传命令名会找不到对应文件,报FileNotFoundError。subprocess模块可正常导入仅调用时报错属于正常现象,模块本身没有损坏,问题出在外部命令查找环节。 - VSCode可正常运行的核心差异是环境配置不同:VSCode如果配置了Git Bash、WSL、MinGW/Cygwin等类Unix环境,启动时会自动将这些工具的二进制目录添加到PATH环境变量中,可以找到对应命令的可执行文件;而PyCharm默认读取系统级环境变量,未包含上述路径,就会触发报错。
- 部分场景下VSCode的Python运行配置默认携带
shell=True参数,也会规避命令查找失败的问题,而PyCharm的运行配置没有加该参数。
解决方案
- 方案1:调用subprocess相关方法时增加
shell=True参数,让系统shell负责解析命令:
import subprocess # 测试pwd命令 subprocess.call('pwd', shell=True) # 测试echo命令 subprocess.call('echo hello world', shell=True)
注意:如果命令参数包含不可信的外部输入,该参数存在命令注入风险,个人自用脚本无需担心。
- 方案2:对齐PyCharm与VSCode的环境变量配置
首先确认PyCharm使用的Python解释器和VSCode完全一致,路径无差异;其次在VSCode终端执行echo $PATH(类Unix终端)或echo %PATH%(cmd终端)复制输出的PATH值,打开PyCharm对应脚本的运行配置,在「环境变量」栏中将PATH替换为刚才复制的内容即可。 - 方案3:优先使用Python内置能力替代外部命令调用,兼容性更强,比如获取当前工作目录直接用
os.getcwd(),文本处理直接用Python内置的字符串方法,不需要调用sed类外部命令。
内容的提问来源于stack exchange,提问作者Vikas
相关产品推荐
相关产品推荐

