1

Dataこの STAF コマンドからセクションを解析する最も簡単な方法は何ですか?
これを自動的に実行するためにコマンドに渡すことができる STAF パラメータが見つからないため、
解析/正規表現が最適なオプションのように見えますか?
:外部ライブラリは使用したくありません。

[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

        }
    ]
}

代わりに、出力/結果を .. のようにフォーマットしたいと思います。

[root@source ~]# STAF target PROCESS START SHELL COMMAND "ls" WAIT RETURNSTDOUT
myFile.txt
myFile2.txt
myFile3.txt
4

2 に答える 2

1
    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.
于 2013-04-05T11:47:25.680 に答える
0

ファイル名のみを除外する sed スクリプトを介して、コマンドの出力をパイプできます。ここに最初のカットがあります:

sed -ne '/^[a-z]/p;/Data/s/[^:]*: \(.*\)/\1/p'

アイデアは次のとおりです。行が小文字で始まる場合、それはファイル名です (最初のセミコロンまでの式)。文字列 "Data" が行にある場合、その行の最初のコロン (セミコロンの後の式) の後に続くすべてのものを取ります。それ以外はすべて無視されます。

先頭に小文字を期待するだけでなく、より具体的にしたい場合があります (これにより、先頭の "Response" 行が除外されますが、ファイル名が大文字で始まる可能性がある場合、それは機能しません)。 )。また、文字列「Data」を探すだけでは、少し一般的すぎる可能性があります。その文字列は、ファイル名にも含まれている可能性があります。しかし、うまくいけば、あなたはアイデアを得るでしょう。これを使用するには、次のようにコマンドを実行します。

STAF ... | sed -ne ...
于 2013-03-29T15:58:38.760 に答える