我有一个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按原样传递命令行参数,无论它们是否包含大括号?
最简单的解决方案是使用
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
似乎解决了这个问题。