如何使用 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
似乎可以解决此问题。
我有一个 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
似乎可以解决此问题。