You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python检测Vaultwarden版本更新后调用bash脚本未执行问题求助

问题排查与修复方案

核心问题1:文件未释放导致执行报错

你当前将subprocess.call的调用逻辑写在了操作vaultwarden-update的with open代码块内部,此时Python仍持有该文件的写锁没有释放,系统会判定文件处于占用状态,因此触发sh text file busy错误,也会导致bash脚本无法正常执行。

核心问题2:subprocess调用参数不规范

你使用的subprocess.call([vcommand], shell=True)属于错误用法:当shell=True时需要传入字符串格式的命令,当shell=False时才需要传入拆分后的命令列表。两种写法混用会导致命令解析异常,无法触发脚本执行。

修正后的代码片段

仅需要调整if判断内的逻辑即可:

# Check who is higher
if LooseVersion(vwgithub_version) == LooseVersion(vw_file_version):
    # 先完成文件写入,with块结束后自动关闭文件、释放句柄
    with open('vaultwarden-update', 'w') as vaultwarden:
        vw_new_file_content = vw_file_content.replace(vw_file_match.group(1), f'dockerversion={vwgithub_version}')
        vaultwarden.write(vw_new_file_content)
    # 文件释放后再执行脚本,使用规范的列表传参+shell=False
    subprocess.call(['bash', 'vaultwarden-update'], shell=False)

额外排查建议

  • 如果Python脚本的工作目录和vaultwarden-update脚本存放目录不一致,建议使用绝对路径指定脚本位置,避免出现找不到文件的问题。
  • 调试阶段可以将subprocess.call替换为subprocess.run(..., capture_output=True, text=True),打印返回的stderr内容可以快速定位其他执行异常。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:02