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']
Другие вопросы по тегам