忽略python中提供的输入

时间:2015-04-20 08:52:53

标签: python shell

我有一个调用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中执行此操作?

2 个答案:

答案 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'

如您所见,它简短明了。