0

GUI를 추가하고 싶은 간단한 CLI 기반 프로그램이 있습니다. 최선을 다해이 스크립트를 CLI를 통해 실행할 수있는 기능을 유지하고 싶습니다. 이것이 가능하다면, 이것에 접근하는 가장 좋은 방법은 무엇입니까? 면책 조항 : 저는 Tkinter에 비교적 새로운입니다!Python argparse CLI 프로그램을 Tkinter가있는 GUI로 변환 하시겠습니까?

from argparse import ArgumentParser 
from ipaddress import IPv4Network 

def Main(): 
    """ Main Program """ 
    parser = ArgumentParser(
     description='Provided a list of IP addresses, format and output the correct fortigate commands to create them') 
    parser.add_argument('VDOM', help='Specify a VDOM', type=str) 
    parser.add_argument(
     'File', help='Specify a file. Each entry should be on its own line, and have no extra characters', typ=str) 
    args = parser.parse_args() 

    with open(args.File, 'r') as input_file: 
     array = input_file.read().splitlines() 

    with open(args.vdom + '.txt', 'w') as output_file: 
     output_file.write("config vdom\n") 
     output_file.write("edit %s\n" % str(args.vdom)) 
     output_file.write("config firewall address\n\n") 

     for i in range(0, len(array)): 
      try: 
       ip_addr = IPv4Network(array[i]) 
       generateip(ip_addr, output_file) 
      except ValueError: 
       url = array[i] 
       generateurl(url, output_file) 


def generateip(ip_addr, output_file): 
    """ 
    Generate a single IP address object. 

    ip_addr -- IP address network object 
    output_file -- an output text file 
    """ 
    output_file.write("edit \"%s\"\n" % str(ip_addr.with_prefixlen)) 
    output_file.write("set color 1\n") 
    output_file.write("set subnet %s %s\n" % 
        (str(ip_addr.network_address), str(ip_addr.netmask))) 
    output_file.write("next\n\n") 


def generateurl(url, output_file): 
    """ 
    Generate a single URL address object. 

    url -- A valid URL string 
    output_file -- an output text file 
    """ 

    output_file.write("edit %s\n" % url) 
    output_file.write("set color 1\n") 
    output_file.write("set type fqdn\n") 
    output_file.write("set fqdn %s\n" % url) 
    output_file.write("next\n\n") 


if __name__ == '__main__': 
    Main() 
+0

분명한 대답은 "GUI를 생성하는 함수를 생성하고, 사용자가'--gui' 옵션을 포함한다면 그 함수를 호출하는 것입니다." 뭔가 다른 것을 찾고 있습니까? –

+0

아, 좋은 생각입니다. 그러나, 나의 필요를 조금 더 잘 설명하게 해주세요. 목표는이 도구가 결국 직장에서 사용되는 것입니다. 나는 NOC 타입 환경에서 일하고 있으며 여기에있는 대부분의 사람들은 python을 설치하지 않았습니다. 나는 이것을 어떤 의존성도 가지지 않는 실행 파일로 바꿀 계획이다. 나는 나 자신과 다른 몇 명의 동료를 위해 CLI 버전을 유지하고 싶다. 두 개의 별도 프로그램이 필요하면 그 경로를 사용할 수도 있습니다. –

답변

1

체크 아웃 https://github.com/chriskiehl/Gooey. 이렇게하면 ArgParser 인수가 GUI로 자동 변환됩니다. GUI는 코드에 따라 달라 지므로 프로그램의 루트는 여전히 CLI에 따라 다릅니다.