Проблема получения значения аргумента при передаче символа "&" в качестве значения - PullRequest
0 голосов
/ 10 марта 2020

Я использую WLST для выполнения некоторых сценариев для развертывания некоторых приложений в Weblogi c.

Я использую библиотеку getopt в Python для анализа аргументов командной строки.

Я создал скрипт для загрузки некоторых файлов по FTP.

Для этого пользователь должен сообщить ' ftpurl ', ' ftpusername ' e ' ftppassword 'опции и соответствующие значения.


import getopt
# -*- coding: utf-8 -*-

#=======================================================
# MAIN
#=======================================================
args = sys.argv
print 'Informed arguments: '
print args
for index in range(len(args)):
    if (":\\" in args[index]) :
        print
        print 'Removing arguments with file path'
        print args[index]
        del args[index]
        break
optlist, argsNotExpected = getopt.getopt(args, '', ['ftpurl=', 'ftpusername=', 'ftppassword='])
print
print 'Found options: '
print optlist
print
print 'Not expected arguments: '
print argsNotExpected

Значение аргумента "test123! @ # $% * () _-", которое имеет много специальных символов, работает.

java weblogic.WLST C:\\Ambiente\\scripts\\python\\getoptTest.py --ftpurl=ftp.test.com --ftppassword=test123!@#$%*()_- --ftpusername=usertest

Результат:

Informed arguments:
['C:\\\\Ambiente\\\\scripts\\\\python\\\\getoptTest.py', '--ftpurl=ftp.test.com', '--ftppassword=test123!@#$%*()_-', '--ftpusername=usertest']

Removing arguments with file path
C:\\Ambiente\\scripts\\python\\getoptTest.py

Found options:
[('--ftpurl', 'ftp.test.com'), ('--ftppassword', 'test123!@#$%*()_-'), ('--ftpusername', 'usertest')]

Not expected arguments:
[]

Но когда я сдаю "test & 123! @ # $% * () _-" с " &", значение равно break, а остальные аргументы игнорируются, начиная с" &".

java weblogic.WLST C:\\Ambiente\\scripts\\python\\getoptTest.py --ftpurl=ftp.test.com --ftppassword=test&123!@#$%*()_- --ftpusername=usertest

Результат:

Informed arguments:
['C:\\\\Ambiente\\\\scripts\\\\python\\\\getoptTest.py', '--ftpurl=ftp.test.com', '--ftppassword=test']

Removing arguments with file path
C:\\Ambiente\\scripts\\python\\getoptTest.py

Found options:
[('--ftpurl', 'ftp.test.com'), ('--ftppassword', 'test')]

Not expected arguments:
[]
'123!@#$%*' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.

Кто-нибудь может дать совет?

1 Ответ

0 голосов
/ 10 марта 2020

Это проблема с оболочкой, поскольку & интерпретируется как специальный символ. В bash она отправляет команду в фоновый режим, тогда как в cmd.exe она используется для объединения нескольких команд .

Это означает, что вы не можете исправить это в сценарии, но вместо этого вы можете указать свои аргументы:

getoptTest.py --ftpurl=ftp.test.com --ftppassword="test&123!@#$%*()_-" --ftpusername=usertest

В качестве альтернативы вы можете использовать ^& для экранирования амперсандов ({ ссылка })

...