Как я могу передать аргументы командной строки, содержащие фигурные скобки, используя подсистему Sun Grid qsub? - PullRequest
0 голосов
/ 03 марта 2019

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

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

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

0 голосов
/ 04 марта 2019

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

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

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

#!/bin/bash
#$ -cwd

python ./script.py ${input}

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

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

...