【问题标题】:WLST Ant Task white space within argumentsWLST Ant 任务参数中的空白
【发布时间】:2014-03-24 20:26:41
【问题描述】:

我正在使用 WLST Ant 任务,它允许在 arguments 属性下传入以空格分隔的参数列表。

问题是当我传递一个包含空格的文件目录时。例如“Program Files”,它成为 Program 和 Files 的两个参数。

有什么建议可以解决这个问题吗?

我下面的建议只适用于一个值。 例如,将“Program Files”参数附加到末尾,然后从已知的 end 参数循环到 sys.argv 的实际末尾。 IE 如果我们希望“Program Files”成为第 4 个系统参数,那么在 WLST 脚本中我们附加 sys.argv[4],[5]...[end]。

【问题讨论】:

  • 您是否尝试提供:程序\文件?
  • 刚刚尝试过,没有运气。
  • 也试过空格转义字符。问题是任何空格字符都被解释为分隔符。

标签: ant jython wlst


【解决方案1】:

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多