从STAF命令解析Data部分的最简单方法是什么?
无法找到我可以传递给命令的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发布于 2013-04-05 11:47:25
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&shortCode=%s&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-03-29 15:58:38
您可以通过sed脚本传递命令的输出,该脚本只为您筛选出文件名。这是第一个切割:
sed -ne '/^[a-z]/p;/Data/s/[^:]*: \(.*\)/\1/p'这样做的目的是:如果一行以小写字母开头,那就是一个文件名(表达式直到第一个分号)。如果字符串"Data“位于该行上,则取该行中第一个冒号之后的所有内容(分号后面的表达式)。其他的都被忽略了。
您可能想要更具体一些,而不仅仅是在开头期望一个小写字母(这将过滤掉开头的"Response“行,但是如果您的文件名可能以大写字母开头,那就行不通了)。另外,仅仅查找字符串“数据”可能有点过于笼统--该字符串也可能出现在文件名中。但希望你能明白。若要使用此命令,请按以下方式运行命令:
STAF ... | sed -ne ...https://stackoverflow.com/questions/15704909
复制相似问题