Pycharm中subprocess调用命令报文件未找到,但终端可正常运行
解决Pycharm中subprocess调用系统命令找不到的问题
这个问题的核心原因很简单:Pycharm运行脚本时使用的环境变量PATH,和你终端里的PATH不是一回事。终端启动时会加载你的shell配置文件(比如.bashrc、.zshrc),这些文件通常会把/usr/sbin这类系统工具目录添加到PATH里,但Pycharm默认不会加载这些配置,所以ifconfig所在的/usr/sbin不在它的搜索路径中,自然就会抛出“文件未找到”的错误。
下面给你几种不用写完整路径就能解决的方法:
方法1:在脚本中临时扩展PATH
你可以在调用subprocess之前,直接修改当前脚本的环境变量,把/usr/sbin添加到PATH里。这样代码修改很直接,适合单个脚本的场景:
import os import subprocess # 把/usr/sbin添加到PATH环境变量中 os.environ['PATH'] += ':/usr/sbin' # 现在直接调用命令名就可以了 result = subprocess.run(['ifconfig'], capture_output=True, text=True) print(result.stdout)
方法2:在Pycharm的运行配置中设置PATH
如果不想修改代码,你可以在Pycharm的运行配置里直接指定包含/usr/sbin的PATH,这样每次运行这个脚本都会生效:
- 点击Pycharm右上角的运行配置下拉框,选择Edit Configurations...
- 在打开的窗口中,找到你当前的Python脚本配置
- 找到Environment variables选项,点击右侧的编辑按钮(小铅笔图标)
- 在弹出的窗口里:
- 如果你想直接复用终端的
PATH,先在终端里执行echo $PATH复制输出内容 - 在Pycharm的环境变量编辑框中,添加或修改
PATH变量,把复制的内容粘贴进去(或者在原有值后面追加:/usr/sbin)
- 如果你想直接复用终端的
- 保存配置后,重新运行脚本就可以了
方法3:让Pycharm加载终端的shell配置(全局生效)
如果你希望Pycharm所有的运行配置都使用和终端一样的环境变量,可以让它加载你的shell配置文件:
- 打开Pycharm的设置:File > Settings(Windows/Linux)或Pycharm > Settings(Mac)
- 导航到Build, Execution, Deployment > Console > Python Console
- 在Environment variables部分,添加
PATH变量并设置为终端中echo $PATH的输出值 - 如果你用Pycharm内置终端,也可以在Tools > Terminal里设置Shell路径为你的默认shell(比如
/bin/bash或/bin/zsh),确保它加载你的shell配置文件
这样设置后,不管是运行脚本还是用内置终端,环境变量都会和你平时用的终端一致,也就不用再担心命令找不到的问题了。
内容的提问来源于stack exchange,提问作者Gianla
相关产品推荐
相关产品推荐

