如何使用sun grid engine qsub传递包含大括号的命令行参数?

问题描述 投票:0回答:2

我有一个Python脚本,我想在sun Grid引擎上运行,这个脚本接受一个可能包含大括号的字符串命令行参数。例如,脚本可能是script.py

import sys
print(sys.argv[1])

如果我运行python script.py aaa{,则输出为aaa{,如果我运行python script.py aaa{},则输出为aaa{}。这些都是理想的行为。

但是,如果我运行qsub -b y -cwd python script.py aaa{作业失败,错误Missing }.,如果我运行qsub -b y -cwd python script.py aaa{}工作成功但输出aaa。这不是理想的行为。

我的假设是qsub对我的脚本执行命令行参数的一些预处理,但我不希望它这样做。有没有办法让qsub按原样传递命令行参数,无论它们是否包含大括号?

python sungridengine
2个回答
0
投票

最简单的解决方案是使用

echo "python script.py aaa{}" | qsub -cwd

您还可以创建包含以下内容的提交文件:

#!/bin/bash
#$ -cwd

python ./script.py ${input}

然后,您可以通过qsub -v input=aaa{} script.submit传递您的输入

两种变体都需要省略-b y


0
投票

我能够通过运行qsub -b y -cwd -shell no python script.py aaa{}而不是qsub -b y -cwd python script.py aaa{}来解决我的问题。在我的系统上,-shell yes似乎默认启用,启动了一些预处理。添加-shell no似乎解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.