如何在Python的subprocess库中无需指定完整路径调用exe文件
解决Python subprocess无需完整路径调用同目录exe的问题
问题根源
你遇到的问题是因为Python的工作目录不一定等于脚本所在目录——比如你在其他目录下运行python xxx/your_script.py时,工作目录是你当前的命令行路径,不是脚本所在的文件夹,所以直接写hashcat.exe会找不到文件。
可靠解决方案:基于脚本目录拼接路径
这是最通用的方法,不管你从哪里运行脚本,都能准确定位到同目录的exe:
import subprocess import os def openHC(): try: # 获取当前脚本的绝对路径,再提取所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接同目录下的exe路径 hashcat_path = os.path.join(script_dir, "hashcat.exe") subprocess.call(hashcat_path) except Exception as e: # 打印具体错误信息,方便排查问题 print(f"执行出错: {str(e)}") openHC()
可选方案:将exe目录加入系统PATH
如果你想直接用hashcat.exe调用,可以临时把脚本所在目录加到环境变量PATH中(这样subprocess会在PATH里查找exe):
import subprocess import os def openHC(): try: script_dir = os.path.dirname(os.path.abspath(__file__)) # 将脚本目录加入PATH,临时生效 os.environ['PATH'] = f"{script_dir}{os.pathsep}{os.environ['PATH']}" subprocess.call("hashcat.exe") except Exception as e: print(f"执行出错: {str(e)}") openHC()
如果需要永久生效,直接在系统环境变量的PATH中添加exe所在的目录即可(之后任何程序都能直接调用该exe)。
额外建议
别用空的except:,它会捕获所有异常包括键盘中断等,不利于排查问题。至少捕获具体异常(比如FileNotFoundError),或者像上面那样打印异常详情,能快速知道是文件找不到还是其他错误。
内容的提问来源于stack exchange,提问作者Ryannnnnnnn
相关产品推荐
相关产品推荐

