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

How can I pass command line arguments containing braces using sun grid engine qsub?

我有一个 Python 脚本,我想在 sun Grid Engine 上 运行,该脚本接受可能包含大括号的字符串命令行参数。例如,脚本可以是 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 将命令行参数按原样传递给我的脚本,而不管它们是否包含大括号?

最简单的解决方案是使用

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

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

#!/bin/bash
#$ -cwd

python ./script.py ${input}

然后,您可以通过 qsub -v input=aaa{} script.submit

传递您的输入

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

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