Как я могу передать аргументы командной строки, содержащие фигурные скобки, используя sun grid engine qsub?

#python #sungridengine

#python #sungridengine

Вопрос:

У меня есть скрипт на 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 передавать аргументы командной строки моему скрипту как есть, независимо от того, содержат они фигурные скобки или нет?

Комментарии:

1. qsub -b y -cwd python -- script.py AAA{ Работает?

2. Нет. Добавление -- туда, похоже, не меняет результат.

Ответ №1:

Самым простым решением было бы использовать

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

Вы также могли бы создать файл отправки, содержащий следующее:

 #!/bin/bash
#$ -cwd

python ./script.py ${input}
  

Затем вы можете передать свой ввод через qsub -v input=aaa{} script.submit

Оба варианта требуют опускания -b y .

Комментарии:

1. Спасибо за ответ, но эти решения у меня не работают. В обоих случаях вывод будет aaa вместо желаемого aaa{} . Кроме того, я использовал, -b y потому что python это двоичный файл.

2. Это интересно, я тестировал оба варианта на двух разных установках SGE. Вы получаете сообщение об ошибке? Или скобки просто не напечатаны?

3. Если мой аргумент равен aaa{} , ошибка не возникает, а результат равен aaa — фигурные скобки просто не печатаются. Если мой аргумент равен aaa{ , то возникает ошибка Missing }. и вывод отсутствует.

Ответ №2:

Я смог решить свою проблему, выполнив qsub -b y -cwd -shell no python script.py aaa{} вместо qsub -b y -cwd python script.py aaa{} . В моей системе -shell yes , похоже, был включен по умолчанию, что инициировало некоторую предварительную обработку. Добавление -shell no , похоже, исправляет это.