Jython против CPython - анализ аргументов модуля sys
При написании сценария развертывания для использования с инструментом сценариев WebLogic (12.1.3) я столкнулся с этим несоответствием между Python 2.2.1 и Jython 2.2.1. Если вы передаете аргументы командной строки каждому, они анализируются по-разному, как отмечено в этой тестовой программе:
$ cat pytest.py
import sys
print sys.argv
При запуске вот результаты с каждым переводчиком.
CPython 2.2.1:
$ /cygdrive/c/Python22/python.exe pytest.py a b 'c,d,e'
['pytest.py', 'a', 'b', 'c,d,e']
Jython 2.2.1:
$ /cygdrive/c/jython2.2.1/jython.bat pytest.py a b 'c,d,e'
['pytest.py', 'a', 'b', 'c', 'd', 'e']
Причина, по которой я использую Jython 2.2.1, заключается в том, что это реализация Python, используемая WLST, поэтому я не верю, что смогу перейти на более позднюю версию или использовать интерпретатор CPython, чтобы обойти проблему в моем случае использования.
Это ошибка? Разбор Jython кажется нелогичным. Есть ли способ проанализировать аргументы CPython в Jython? Заранее спасибо.
Содержимое jython.bat (входит в комплект установки Jython):
$ cat jython.bat
@echo off
rem This file was generated by the Jython installer
rem Created on Mon Oct 31 13:19:59 PDT 2016 by smcgloth
set ARGS=
:loop
if [%1] == [] goto end
set ARGS=%ARGS% %1
shift
goto loop
:end
"C:\Program Files\Java\jre1.8.0_101\bin\java.exe" -Dpython.home="C:\jython2.2.1" -classpath "C:\jython2.2.1\jython.jar;%CLASSPATH%" org.python.util.jython %ARGS%
1 ответ
Этим утром я обсуждал это со своей командой, и мы выяснили, почему я испытываю это в среде Linux, поэтому я решил опубликовать ответ на случай, если это кому-нибудь поможет. Один из моих товарищей по команде написал сценарий запуска для WLST, который я пропустил:
$ cat wlst
#!/bin/sh
wlst.sh -skipWLSModuleScanning $@
Виновником в моем случае был -skipWLSModuleScanning
флаг. Из документации:
Используйте эту опцию, чтобы сократить время запуска, пропуская сканирование пакетов и кэширование для модулей WebLogic Server.
Похоже, что пропуск сканирования пакетов должен пропустить что-то решающее, что влияет на то, как Jython анализирует аргументы командной строки.
Вот результаты при пропуске сканирования модуля WLS:
$ wlst ~/pytest.py a b 'c,d,e'
Initializing WebLogic Scripting Tool (WLST) ...
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands
['pytest.py', 'a', 'b', 'c', 'd', 'e']
И вот результаты со стандартным вызовом wlst.sh, который я и ожидал:
$ wlst.sh ~/pytest.py a b 'c,d,e'
Initializing WebLogic Scripting Tool (WLST) ...
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands
['/home/tdmsadm/pytest.py', 'a', 'b', 'c,d,e']