首页 > 解决方案 > 将“&”字符作为值传递时获取参数值的问题

问题描述

我正在使用 WLST 执行一些脚本以在 Weblogic 中部署一些应用程序。

我在 Python 中使用 getopt 库来解析命令行参数。

我创建了一个脚本来通过 FTP 下载一些文件。

为此,用户必须告知“ ftpurl ”、“ ftpusername ”和“ 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!@#$%*()_-”时,值是中断,其余的参数从“ & ”开始被忽略。

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.

任何人都可以给小费吗?

标签: pythonweblogicgetoptwlst

解决方案


这是 shell 的一个问题,因为&它被解释为一个特殊字符。在bash中,它将命令发送到后台,而在cmd.exe它用于链接多个命令

这意味着您无法在脚本中修复它,但您可以引用您的参数:

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

或者,您可以使用^&转义符号 ( https://stackoverflow.com/a/27960888/12833309 )


推荐阅读