首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析来自远程STAF命令的数据输出

解析来自远程STAF命令的数据输出
EN

Stack Overflow用户
提问于 2013-03-29 14:08:08
回答 2查看 947关注 0票数 1

从STAF命令解析Data部分的最简单方法是什么?

无法找到我可以传递给命令的STAF参数来自动执行此操作,

那么,解析/正则表达式可能是最好的选择吗?

注意事项:我不想使用任何外部库。

代码语言:javascript
复制
[root@source ~]# STAF target PROCESS START SHELL COMMAND "ls" WAIT RETURNSTDOUT
Response
--------
{
    Return Code: 0
    Key        : <None>
    Files      : [
        {
            Return Code: 0
            Data       : myFile.txt
myFile2.txt
myFile3.txt

        }
    ]
}

相反,我希望输出/结果被格式化为..

代码语言:javascript
复制
[root@source ~]# STAF target PROCESS START SHELL COMMAND "ls" WAIT RETURNSTDOUT
myFile.txt
myFile2.txt
myFile3.txt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 11:47:25

代码语言:javascript
复制
    Best way to this is Create a XML file and use python script  to access the data part of STAFResult since STAF Return data in Marshalled form as "CONTENT" and python can be use to grab that.

    I will try to explain it with simple example, Its an HTTP request to server. 



 <stafcmd>
    <location>'%s'%machineName</location>
    <service>'http'</service>                   
    <request>'DOGET URL %s?phno=%s&amp;shortCode=%s&amp;query=%s' % (url, phno, shortCode, escapeQuery)</request>
    </stafcmd>
    <if expr="RC == 0">
                <sequence>                      
                    <call function="'func_Script'"></call>
                    <if expr="rc == 0">     <!-- Pass At First Query -->                
                        <sequence>                                                  
                            <message>'PASS@Fisrt HTTPRequest: Keyword = %s,\nRequired Response = %s,\ncontent=%s' %(query, response, content)</message>
                            <tcstatus result="'pass'">'Pass:' </tcstatus>   
                        </sequence>
                    <else>  <!-- Check For MORE -->     
                        <call function="'Validate_QueryMore'"> </call>
                    </else>
                    </if>
                </sequence> 
            <else>
                <message>'ERROR: HTTPRequest QUERY : RC = %s  Result= %s' %(rc,STAFResult)</message>
            </else>                 
            </if>   


<function name="func_Script">
    <script>
        import re
        content = STAFResult['content'].lower() 
        response = response.lower()
        test = content.find(response)
        if test != -1:
            rc = 0 
        else:
            rc = 1 
    </script>
</function>


Hope It will give you some Help.
票数 1
EN

Stack Overflow用户

发布于 2013-03-29 15:58:38

您可以通过sed脚本传递命令的输出,该脚本只为您筛选出文件名。这是第一个切割:

代码语言:javascript
复制
sed -ne '/^[a-z]/p;/Data/s/[^:]*: \(.*\)/\1/p'

这样做的目的是:如果一行以小写字母开头,那就是一个文件名(表达式直到第一个分号)。如果字符串"Data“位于该行上,则取该行中第一个冒号之后的所有内容(分号后面的表达式)。其他的都被忽略了。

您可能想要更具体一些,而不仅仅是在开头期望一个小写字母(这将过滤掉开头的"Response“行,但是如果您的文件名可能以大写字母开头,那就行不通了)。另外,仅仅查找字符串“数据”可能有点过于笼统--该字符串也可能出现在文件名中。但希望你能明白。若要使用此命令,请按以下方式运行命令:

代码语言:javascript
复制
STAF ... | sed -ne ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15704909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档