Linux/Ubuntu下trimScript_Denovo.py脚本无法正常运行求助
问题排查与修复
核心问题分析
你的脚本无法执行主要有以下几个原因:
- 未传入命令行参数:脚本的循环依赖
sys.argv获取样本编号,但你运行时没传参数,导致循环体根本不会执行,自然没任何输出。 - 脚本语法/拼写错误:
- 拼接命令时出现笔误:
outputUPF\nile1是错误写法,应该是outputUPFile1,这个错误会导致变量引用失败,触发报错(但os.system默认不反馈错误,你看不到)。 baseParamter里的LEADING:\n3包含换行符,会把Trimmomatic的参数拆成两行,导致命令执行失败。
- 拼接命令时出现笔误:
- 无错误反馈机制:用
os.system执行命令时,不会自动输出错误信息,就算命令执行失败你也看不到原因。
修复后的脚本
import sys import subprocess baseCommand = "java -jar /home/user/sra_data/Trimmomatic-0.39/trimmomatic-0.39.jar PE -phred33" # 移除LEADING后的换行符,修正参数格式 baseParamter = "ILLUMINACLIP:/home/user/sra_data/Trimmomatic-0.39/adapters/TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36" fileBaseName = "SRR" extName = ".fastq" # 先检查是否传入参数,给出提示 if len(sys.argv) < 2: print("请传入样本编号,例如:python3 trimScript_Denovo.py 15013283 15013284") sys.exit(1) for i in range(1, len(sys.argv)): accessionName = sys.argv[i] inputFile1 = fileBaseName + accessionName + "_1" + extName inputFile2 = fileBaseName + accessionName + "_2" + extName outputPFile1 = fileBaseName + accessionName + "_1_P" + extName outputUPFile1 = fileBaseName + accessionName + "_1_UP" + extName outputPFile2 = fileBaseName + accessionName + "_2_P" + extName outputUPFile2 = fileBaseName + accessionName + "_2_UP" + extName # 修复变量名错误,用f-string更清晰 fetchCommand = f"{baseCommand} {inputFile1} {inputFile2} {outputPFile1} {outputUPFile1} {outputPFile2} {outputUPFile2} {baseParamter}" # 打印要执行的命令,方便调试 print(f"正在处理样本 {accessionName}...") print(f"执行命令:{fetchCommand}") # 使用subprocess捕获输出和错误,便于排查问题 result = subprocess.run(fetchCommand, shell=True, capture_output=True, text=True) if result.returncode != 0: print(f"样本 {accessionName} 处理失败:") print("错误详情:", result.stderr) else: print(f"样本 {accessionName} 处理完成")
正确运行方式
在终端执行以下命令,传入你的样本编号:
python3 trimScript_Denovo.py 15013283 15013284
额外建议
- 确认Trimmomatic的jar包路径、适配器文件路径完全正确,避免因文件不存在导致执行失败。
- 用
subprocess替代os.system能更直观地获取命令执行的输出和错误信息,大幅降低调试难度。
内容的提问来源于stack exchange,提问作者Caroline
相关产品推荐
相关产品推荐

