我正在使用WLST Ant任务,该任务允许在arguments属性下传递空格分隔的参数列表。
问题是当我传递包含空格的文件目录时。例如" Program Files"这成为程序和文件的两个参数。
有什么建议可以解决这个问题吗?
我的建议只适用于一个值。 例如,附加" Program Files"结束的参数和从已知结束参数到sys.argv实际结束的循环。 IE如果我们想要" Program Files"成为第四个系统参数然后在WLST脚本中我们附加sys.argv [4],[5] ... [end]。
答案 0 :(得分:0)
WLST 11.1.1.9.0的简短回答:你无法解决这个问题。
我遇到了同样的问题,调试了一下。
我的发现: weblogic-11.1.1.9.jar中的WLSTTask类通过命令行WLSTInterpreterInvoker调用,该命令行解析args:
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获取单独的参数,即使引用参数
有两种可能的选择:
12.2.1中的executePyScript()代码发生了很大的变化,似乎问题可能已经消失了(我还没有检查过)
if ((this.arguments.indexOf("\"") == -1) && (this.arguments.indexOf("'") == -1))
args = StringUtils.splitCompletely(this.arguments, " ");
else {
args = splitQuotedString(this.arguments);
}