python - 将“&”字符作为值传递时获取参数值的问题
问题描述
我正在使用 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.
任何人都可以给小费吗?
解决方案
这是 shell 的一个问题,因为&
它被解释为一个特殊字符。在bash
中,它将命令发送到后台,而在cmd.exe
它用于链接多个命令。
这意味着您无法在脚本中修复它,但您可以引用您的参数:
getoptTest.py --ftpurl=ftp.test.com --ftppassword="test&123!@#$%*()_-" --ftpusername=usertest
或者,您可以使用^&
转义符号 ( https://stackoverflow.com/a/27960888/12833309 )
推荐阅读
- c++ - CMake 错误:无法确定目标的链接语言
- php - 包含带有 try 和 catch 函数的文件
- javascript - 如何将一个真或假的 const 列表分类为两个单独的数组,一个包含真对象,一个包含假对象?
- maven - 如何使用 SonarCloud 分析 Git 子模块?
- docker - 如何显示在 Docker 容器内运行的操作系统的 GUI?
- python - 如何修复 Python 中的 GridSearchCV 错误?
- html - Bootstrap 导航栏图标和切换按钮问题
- ssl - 我可以替换 client-ca-file 以使 kubernetes 上的所有用户无效吗?
- asp.net - 如何解决这个IIS慢的问题?
- javascript - process.env.API_URL 未定义