我有一个调用shell脚本(get_list.sh)的python代码,这个shell脚本调用一个.txt文件,该文件具有如下内容:
aaf:hfhfh:notusable:type: - city_name
hhf:hgyt:usable:type: - city_name
llf:hdgt:used:type: - city_name
当我在运行python代码之后提供输入时:
提供输入的代码:
List = str(raw_input('Enter pipe separated list : ')).upper().strip()
hhf|aaf|llf
获取输出的代码:
if List:
try:
cmd = "/home/dponnura/get_list.sh -s " + "\"" + List + "\""
selfP = commands.getoutput(cmd).strip()
except OSError:
print bcolors.FAIL + "Could not invoke Pod Details Script. " + bcolors.ENDC
它显示输出为:
hhf detils : hfhfh:notusable:type: - city_name
aaf details : hgyt:usable:type: - city_name
llf details : hdgt:used:type: - city_name
我的要求是什么,如果我在执行python代码后传递输入,如果我的内容不在.txt文件中,它应该显示输出为:
如果我提供输入:
hhf|aaf|llf|ggg
然后对于'ggg'它应该显示我:
'ggg' is wrong input
hhf detils : hfhfh:notusable:type: - city_name
aaf details : hgyt:usable:type: - city_name
llf details : hdgt:used:type: - city_name
请告诉我如何在python或shell中执行此操作?
答案 0 :(得分:0)
这是在Python中完成的,不需要调用get_list.sh
import sys,re
List = str(raw_input('Enter pipe separated list : ')).strip().split('|')
for linE in open(sys.argv[1]):
for l1 in List:
m1 = re.match(l1+':(.+)',linE)
if m1:
print l1,'details :',m1.group(1)
List.remove(l1)
break
for l1 in List : print l1,'is wrong input'
用法: python script.py textFile.txt
答案 1 :(得分:-1)
您的任务可以(我认为必须)在纯Python中实现。下面是使用Python的解决方案的可能变体之一,没有外部脚本或库
pipelst = str(raw_input('Enter pipe separated list : ')).split('|')
filepath = 'test.txt' # specify path to your file here
for lns in open(filepath):
split_pipe = lns.split(':', 1)
if split_pipe[0] in pipelst:
print split_pipe[0], ' details : ', split_pipe[1]
pipelst.remove(split_pipe[0])
for lns in pipelst : print lns,' is wrong input'
如您所见,它简短明了。