我在Python脚本中运行的Shell脚本中运行sql查询。因为,在prod env中我没有cx_Oracle库,所以我需要使用shell脚本。现在,当我使用python调用shell脚本时,我得到的输出是字符串。如何将输出转换为列表。您只能使用commands.getoutput或subprocess.Popen。
#!/usr/bin/python
import re,os,commands,os.path
import subprocess
#output = commands.getoutput("sh FA_FMW.sh")
output = subprocess.Popen(["sh", "ABC.sh"],
stdout=subprocess.PIPE).communicate()[0]
print output
输出:
Successfully created: APPABC.env
ABCenv succeeded.
ABC_ACTIVITIES ACTIVITIES
12.11.1.8.0 VALID N
ABC_BIA_CLOUD ATBCITE
12.11.1.8.1 VALID Y
上面我刚刚提到了两行查询输出,每行有5列。我如何才能明智地访问此输出行和列,以便对版本号和有效的无效标志执行某些操作。另外,需要过滤成功消息的前两行。例如,我只需要打印每行的前两列。这两条线是同一行的一部分。
for i in range(0, len(output)):
print output[i][0], output[i][2], output[i][4]
输出:
ABC_ACTIVITIES 12.11.1.8.0 N
ABC_ACTIVITIES 12.11.1.8.1 Y
答案 0 :(得分:1)
使用正则表达式。
例如:
import re
output = """Successfully created: APPABC.env
ABCenv succeeded.
ABC_ACTIVITIES ACTIVITIES
12.11.1.8.0 VALID N
ABC_BIA_CLOUD ATBCITE
12.11.1.8.1 VALID Y"""
for chunk in re.findall(r"\n\b[A-Z_]+\b.*?\b[A-Z]\b", output, flags=re.MULTILINE|re.DOTALL):
print chunk.split()[0::2]
输出:
['ABC_ACTIVITIES', '12.11.1.8.0', 'N']
['ABC_BIA_CLOUD', '12.11.1.8.1', 'Y']