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

subprocess.check_output调用出现Invalid Syntax语法错误问题求助

错误原因分析
  1. Python内核版本不支持f-string语法:f-string是Python 3.6版本新增的特性,Colab环境默认搭载高版本Python可正常运行,若本地Jupyter Notebook使用的Python内核版本低于3.6,会直接抛出f-string相关的语法错误。
  2. 代码结构语法错误:你贴出的参数代码存在非法赋值问题,command定义末尾的括号后多了一个逗号,且下一行直接写message='Data files downloaded.\n',如果这段代码没有包裹在call_bash函数的入参括号内,属于非法的Python语法,会触发语法报错。
排查解决步骤
  • 首先确认Jupyter的Python内核版本,在Notebook中运行如下代码查看版本:
import sys
print(sys.version)

如果版本号低于3.6,有两种解决方式:

  • 升级Jupyter对应的Python环境到3.6及以上版本
  • 将所有f-string替换为兼容低版本的str.format()写法,例如将f"'{self.script_dir + 'data.sh'}' "替换为"'{}' ".format(self.script_dir + 'data.sh'),其余f-string按照相同规则替换即可。
  • 修正代码结构问题:
    如果是单独给command和message两个变量赋值,需要删除command赋值语句末尾的逗号,分开两行写:
command = (
                f"'{self.script_dir + 'data.sh'}' "
                f"-D '{self.data_dir}' "
                f"-T '{self.tfds_dir}' "
                f"-R '{self.records_dir}' "
                f"-j {data_url} " 
                f"-a {annotations_url} "
                f"-m {detections_url} "
                f"-I '{self.params['img_dir']}' "
                f"-r {self.params['use_records']} "
                f"-d {self.params['dataset']} "
                f"-i {self.params['download_images']} "
            )
message='Data files downloaded.\n'

如果这两个参数是直接传给call_bash函数的入参,需要把整体包裹在函数调用的括号内:

call_bash(
    command = (
                f"'{self.script_dir + 'data.sh'}' "
                f"-D '{self.data_dir}' "
                f"-T '{self.tfds_dir}' "
                f"-R '{self.records_dir}' "
                f"-j {data_url} " 
                f"-a {annotations_url} "
                f"-m {detections_url} "
                f"-I '{self.params['img_dir']}' "
                f"-r {self.params['use_records']} "
                f"-d {self.params['dataset']} "
                f"-i {self.params['download_images']} "
            ),
    message='Data files downloaded.\n'
)
  • 额外优化:你当前使用shell=True参数调用subprocess.check_output,传入字符串格式的命令即可,不需要把command包装为元组,直接拼接成完整字符串可以避免不必要的参数解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:39:05