在CLI中创建可单击项

2024-04-25 07:07:34 发布

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

因此,我正在创建一个小型python程序,它将使用subprocess.call()函数启动其他程序。我想知道是否有任何方法可以在CLI中共同创建可单击的框,以帮助用户知道他/她有什么选项,并使其更易于选择。你知道吗

目前我只使用input()函数和if/elif/else函数来确定要启动什么。我想把它转换成CLI上的一个可点击的界面,这样除了点击之外就不需要任何输入了。你知道吗

这是我目前正在使用的。还没有找到任何关于这样一个选择的材料,也许我找得不够仔细。你知道吗

import getpass
import subprocess
import os
OSPath = "/SYS64 3.7/"
full_path = os.getcwd()
CurrentPath = ""
dir_path = os.path.dirname(os.path.realpath(__file__))
answer = input("INPUT BOOT PARAMETER ")
if answer == "jdos":
    subprocess.call(["python3",dir_path + OSPath + "bootthingy.py"])
    subprocess.call(["python3",dir_path + OSPath + "jdosos.py"])
elif answer == "jdos.fboot":
    subprocess.call(["python3",full_path + OSPath + "jdosos.py"])
elif answer == "jdos.admin":
    user = getpass.getpass("username: ")
    password = getpass.getpass("password: ")
    bootcheck = 0
    with open('userpass.txt', 'r') as file:
        for line in file:
            line = line.strip('\n')
            login = line.split(',')
            if login[0] == user and login[1] == password:
                subprocess.call(["python3",full_path + OSPath + "jdososadmin.py"])
                bootcheck = 1
        if bootcheck == 0:
            print("Incorrect user or password.")
elif "jdos.exp" in answer:
    subprocess.call(["python3",full_path + OSPath + "jdosexperimentail.py"])
elif answer == "cancel":
    print("")
else:
    print("invalid")

与用户在input()中键入jdos不同的是,您将有4个包含4个不同选项的可单击框,它们看起来像这样:[jdos] [jdos.fboot] [jdos.admin] [jdos.exp],如果单击,每个框都运行subprocess.call()

我尝试过使用npyscreen包,但未能成功运行

这就是我使用提供的npyscreen代码时的样子。你知道吗

NPYScreen code works!

这就是当我选择一个框并点击OK时发生的情况

Python program does not launch properly...

如您所见,程序确实在运行,它只是覆盖了最上面的文本,并且我无法在input('C:/SYS64 3.7> ')函数中输入任何内容,我认为这可能会导致npyscreen应用程序无法关闭。我对npyscreen还是个新手,我不知道它到底是怎么工作的。你知道吗


Tags: path函数answerpyinputifoscall
1条回答
网友
1楼 · 发布于 2024-04-25 07:07:34

Npyscreen允许您制作控制台应用程序,您可以要求用户提供一些信息。你知道吗

你可以继续使用这个模板,我只是用基本的方法。我建议你阅读这个图书馆的文献。你知道吗

import npyscreen
import os
import getpass
import subprocess

class mainform(npyscreen.ActionForm):
    def create(self):
        self.OSPath = "/SYS64 3.7/"
        self.full_path = os.getcwd()
        self.CurrentPath = ""
        self.dir_path = os.path.dirname(os.path.realpath(__file__))

        opt_values = ["jdos", "jdos.fboot", "jdos.admin", "jdos.exp"]

        welcome_box = self.add(npyscreen.BoxTitle, max_height = 2, editable = False, value = "Welcome. Select BOOT PARAMETER")
        self.answer = self.add(npyscreen.TitleSelectOne, max_height = 4, name = "Selections:", values = opt_values, scroll_exit = True)


    def on_ok(self):
        if self.answer.value[0] == 0:
            subprocess.call(["python3", self.dir_path + self.OSPath + "bootthingy.py"])
            subprocess.call(["python3", self.dir_path + self.OSPath + "jdosos.py"])
        elif self.answer.value[0] == 1:
            subprocess.call(["python3", self.full_path + self.OSPath + "jdosos.py"])
        elif self.answer.value[0] == 2:
            user = getpass.getpass("username: ")
            password = getpass.getpass("password: ")
            bootcheck = 0
            with open('userpass.txt','r') as file:
                for line in file:
                    line = line.strip('\n')
                    login = line.split(',')
                    if login[0] == user and login[1] == password:
                        subprocess.call(["python3", self.full_path + self.OSPath + "jdososadmin.py"])
                        bootcheck = 1
                if bootcheck == 0:
                    print("Incorrect user or password.")
        elif self.answer.value[0] == 3:
            subprocess.call(["python3", self.full_path + self.OSPath + "jdosexperimentail.py"])

        self.parentApp.setNextForm(None)

    def on_cancel(self):
        self.parentApp.setNextForm(None)

#Application starts here
class App(npyscreen.NPSAppManaged):

    #Defining forms.
    def onStart(self):
        self.addForm('MAIN', mainform, name="name_here")

if __name__ == "__main__":
    app = App().run()

相关问题 更多 >