将“&”字符作为值传递时获取参数值时出现问题

2024-10-03 17:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在使用Python中的getopt库解析命令行参数

我创建了一个脚本来通过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.

有人能给小费吗


Tags: pytestcomindexscriptsargsftparguments
1条回答
网友
1楼 · 发布于 2024-10-03 17:18:34

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

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

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

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

相关问题 更多 >