условные аргументы командной строки [возможно, используя getopt () ??] - PullRequest
0 голосов
/ 14 мая 2011

Это связано с моим предыдущим постом здесь . Запустив реальный скрипт, я вывел результат примерно так:

[root@test_vm /]# torque_history.py -m 4
Job Id       User      Real User       Start Date      S  End Date        Exec Host    Queue  
-----------  --------  --------------  --------------  -  --------------  -----------  -------
0.vmtest2    dteam001  Kashif M. Raza  18/04 16:53:03  C  18/04 16:53:05  vmtest1.abc  express
2.vmtest2    dteam007  Arnau Hahkala   19/04 13:21:19  C  19/04 13:23:26  vmtest3.abc  medium
....
....
160.vmtest2  sgmatlas  Andrew Lloyd    30/04 15:44:36  C  30/04 15:54:04  node029.abc  short  
162.vmtest2  sgmops    Maarten Lapka   30/04 16:44:36  C  30/04 16:45:48  vmtest1.abc  express
---------------------------------
107 records in history (0.04 sec)

-m 4 печатает записи только за апрель, если опция не указана, печатает записи целиком и так далее. Я хочу, чтобы мой пользователь мог построить строку условного запроса, например: m == "4" && RealUser == "Maarten Lapka", а также вывести результат с единственными полями, которые он хочет, в желаемом формате, например: JobId && StartDate && User, что означает, что пользователь ищет записи о работах, представленные Мартеном Лапкой в ​​апреле и желающие напечатать только идентификатор задания, дату начала работы и имя пользователя в указанном им порядке. Таким образом, возможная команда может быть:

torque_history.py -c 'm == "4" && RealUser == "Maarten Lapka"' -f 'JobId && ExecHost && StartDate'

, где -c - это сокращение от --constraint и -f для --format или чего-либо еще. Кто-нибудь может предложить мне какой-нибудь способ сделать это? Можно ли использовать getopt()?

Часть моей проблемы в том, что мы используем вариант RHEL5 (то есть SL5, SLC5, CentOS), все они поставляются с Python v2.4 в качестве стандарта, и я не могу убедиться, что на каждом сайте v2.6 работает параллельно. Итак, я хочу максимально приблизиться к v2.4 и использовать getopt(), если это возможно. Мой план состоит в том, чтобы скомпилировать код Python, используя shedskin и распространять файл c ++, чтобы минимизировать проблему совместимости. В этом случае я могу использовать v2.6, но я должен использовать модули, которые поддерживают shedskin, и getopt () является одним из них.

Извините, если я затрудняю вас, ребята, но я действительно с нетерпением жду некоторой помощи и предложений. Спасибо за ваше время. Ура !!!

1 Ответ

1 голос
/ 14 мая 2011

optparse - это чистый Python, поэтому я забуду о getopt() и в случае необходимости добавлю его в ваше приложение.

try:
  import optparse
except ImportError:
  import external.optparse as optparse

Не забудьте создать external/__init__.py.

...