WLST 11.1.1.9.0 的简短回答:您无法解决这个问题。
我也有同样的问题,调试了一下。
我的发现:
weblogic-11.1.1.9.jar 中的 WLSTTask 类通过解析参数的命令行 WLSTInterpreterInvoker 调用:
private void parseArgs(String[] arg) {
for (int i = 0; i < arg.length; i++) {
this.arguments = (this.arguments + " " + arg[i]);
}
[...]
由于我不知道在调用 python 脚本之前再次解析这些 args 的原因:
private void executePyScript() {
[...]
if (this.arguments != null) {
String[] args = StringUtils.splitCompletely(this.arguments, " ");
[...]
public static String[] splitCompletely(String paramString1, String paramString2)
{
return splitCompletely(new StringTokenizer(paramString1, paramString2));
}
private static String[] splitCompletely(StringTokenizer paramStringTokenizer) {
int i = paramStringTokenizer.countTokens();
String[] arrayOfString = new String[i];
for (int j = 0; j < i; j++) arrayOfString[j] = paramStringTokenizer.nextToken();
return arrayOfString;
}
不幸的是,StringTokenizer 方法不区分带引号的字符串,因此 Python 中的 sys.argv 会获取单独的参数,即使您引用参数也是如此
有两种可能的选择:
- 将 Ant 中的空格替换为其他内容(例如 %20)并在 Python 中“解码”它们。
- 在 Ant 中编写一个属性文件并在 Pyhton 中读取该文件。
12.2.1中executePyScript()的代码改了很多,看来问题可能没有了(我没查过)
if ((this.arguments.indexOf("\"") == -1) && (this.arguments.indexOf("'") == -1))
args = StringUtils.splitCompletely(this.arguments, " ");
else {
args = splitQuotedString(this.arguments);
}