如何无需生成物理Bash脚本,直接用字符串向SGE提交任务?
直接通过字符串提交SGE任务(无需生成物理脚本文件)
完全可以跳过生成物理脚本文件的步骤,直接将脚本内容以字符串形式提交给SGE——SGE的qsub命令支持从**标准输入(stdin)**读取任务脚本内容,不用依赖本地文件。
具体实现方式(Python示例)
用Python的subprocess模块,把构造好的SGE脚本字符串通过管道传给qsub即可,无需写入本地文件:
import subprocess # 构造SGE任务脚本内容(包含SGE参数和任务命令) sge_script_content = """#!/bin/bash #$ -N my_task #$ -V #$ -cwd #$ -o output.log #$ -e error.log echo "任务执行中..." sleep 10 echo "任务完成" """ # 提交任务:通过stdin传递脚本内容 result = subprocess.run( ["qsub"], input=sge_script_content.encode("utf-8"), capture_output=True, text=True ) # 检查提交结果 if result.returncode == 0: print(f"任务提交成功,任务ID: {result.stdout.strip()}") else: print(f"任务提交失败,错误信息: {result.stderr.strip()}")
关键说明
- 脚本字符串里的
#$开头行是SGE的参数配置,和写入物理文件时的格式完全一致 subprocess.run的input参数接收字节流,所以需要把字符串编码后传入- 如果需要批量提交多个任务,循环构造不同的脚本字符串并重复调用
subprocess.run即可,全程不会生成任何临时文件
内容的提问来源于stack exchange,提问作者ivan199415
相关产品推荐
相关产品推荐

