从CLI执行程序时,如何在代码中获取用户输入作为delete函数的参数

2024-04-29 15:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

该程序在执行时完全独立运行,但当从另一个脚本调用该脚本时,它会给出“EOFError:EOF when reading a line”

下面是我的代码: ''' #!/usr/bin/python 导入pdb #pdb.set_trace() 从lxml导入etree作为ET 导入argparse 导入操作系统 导入系统 从颜色导入*

filename = "/appl/OMS/Build_Details/build_details.xml"
parser = ET.XMLParser(remove_blank_text=True)
tree = ET.parse(filename, parser)
root = tree.getroot()

parser = argparse.ArgumentParser()
parser.add_argument("r",  help="Provide Release Number")
parser.add_argument("b", help="Provide Build number")
parser.add_argument("oms", help="Provide OMS Storage Name")
parser.add_argument("pc", help="Provide PC version")
parser.add_argument("omni", help="Provide OMNI Storage Name")
args = parser.parse_args()

def display():
        sys.stdout.write(RESET)
        print "Displaying all existing releases in Build XML"
        for elem in root.iter("Release"):
                sys.stdout.write(GREEN)
                print int(elem.attrib['number']),
                print " "
def add_details():
        counter=0
        for elem in root.iter("Release"):
                        #print int(elem.attrib['number']),int(args.r)
                        if int(elem.attrib['number']) == int(args.r):
                                        sys.stdout.write(YELLOW)
                                        print "Release found!!",
                                        counter=counter+1
                                        break

        if counter == 1:
                        for a in elem.iter('Build'):
                                        #print a.attrib['number']
                                        if int(a.attrib['number']) == int(args.b):
                                                        print "Build already exists"
                                                        break
                        else:
                                        #Take backup od existing build xml
                                        os.system('cp /appl/OMS/Build_Details/build_details.xml /appl/OMS/Build_Details/Backup/build_details.xml_$(date +"%Y%m%d-%H%M%S")')
                                        #Create new  OMS element
                                        build_elem = ET.Element("Build", {"number": args.b})
                                        oms_elem = ET.Element("OMS")
                                        build_path_elem = ET.Element("Build_path")
                                        build_path_elem.text = args.oms
                                        pc_version_elem = ET.Element("Pc_version")
                                        pc_version_elem.text = args.pc
                                        oms_elem.append(build_path_elem)
                                        oms_elem.append(pc_version_elem)
                                        # OMNI element
                                        omni_elem = ET.Element("OMNI")
                                        build_path_omni_elem = ET.Element("Build_path")
                                        build_path_omni_elem.text = args.omni
                                        omni_elem.append(build_path_omni_elem)
                                        build_elem.append(oms_elem)
                                        build_elem.append(omni_elem)
                                        elem.append(build_elem)
                                        # Write to file
                                        tree.write("/appl/OMS/Build_Details/build_details.xml",pretty_print=True) # After adding the new element
                                        print "Adding build details"
        else:

                        #Take backup of existing build xml
                        os.system('cp /appl/OMS/Build_Details/build_details.xml /appl/OMS/Build_Details/Backup/build_details.xml_$(date +"%Y%m%d-%H%M%S")')
                        # Create new Release Element
                        Release = ET.SubElement(root, "Release",number=args.r)
                        #Build elementq
                        Build = ET.SubElement(Release, "Build", number=args.b)
                        OMS=ET.SubElement(Build,"OMS")
                        ET.SubElement(OMS,"Build_path").text =args.oms
                        ET.SubElement(OMS,"Pc_version").text =args.pc
                        OMNI=ET.SubElement(Build,"OMNI")
                        ET.SubElement(OMNI,"Build_path").text =args.omni
                        tree.write("/appl/OMS/Build_Details/build_details.xml",pretty_print=True) # After adding the new element
                        sys.stdout.write(YELLOW)
                        print "Release details added"

def delete():
        sys.stdout.write(RESET)
        release_number = int(input("Enter the release number you want to delete or else enter 0\n"))
        for elem in root.iter("Release"):
                if int(elem.attrib['number']) == int(release_number):
                        sys.stdout.write(YELLOW)
                        print "Release found"
                        root.remove(elem)
                        #Take backup od existing build xml
                        os.system('cp /appl/OMS/Build_Details/build_details.xml /appl/OMS/Build_Details/Backup/build_details.xml_$(date +"%Y%m%d-%H%M%S")')
                        tree.write("/appl/OMS/Build_Details/build_details.xml",pretty_print=True)
                        print "Delete complete"

def main():
        #print "Calling add details"
        add_details()
        #print "calling  display"
        print "\n"
        display()
        #print "Calling delete "
        print "\n"
        delete()
        #print "calling second  display"
        print "\n"
        display()
        sys.stdout.write(RESET)
main()

'''

请让我知道如何像其他人一样将delete函数的运行时输入作为参数传递。 我是python的新手,正在尝试这种语言


Tags: buildnumberreleaseargsxmldetailsetwrite