#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
, похоже, исправляет это.