因此,我不确定该如何写标题,但是subprocess.Popen
,os.path.join
和npyscreen
协同工作时出现问题。仅当我使用os.path.join
时,它才似乎不起作用。我已经将它与subprocess.Popen
的已定义文件路径一起使用,但是我希望它可以在任何安装目录上工作,而无需手动键入目录路径。
这是我正在使用的npyscreen
应用程序。
import npyscreen
import os
import subprocess
class mainform(npyscreen.ActionForm):
def create(self): # Defining functions and calls for application window
self.full_path = os.getcwd()
self.mainFile = r"\SYS64"
self.dir_path = os.path.dirname(os.path.realpath(__file__))
self.executable_path = os.path.join(self.dir_path, "SYS64", "jdosos.py")
opt_values = ["jdos", "jdos.fboot"]
self.answer = self.add(npyscreen.TitleSelectOne, max_height=4, name="Selections:", values=opt_values, scroll_exit=True)
def exit_application(self):
self.parentApp.setNextForm(None)
self.editing = False
def on_ok(self):
if self.answer.value[0] == 0: # Selection 1
subprocess.Popen(["python",r'\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\bootthingy.py'])
elif self.answer.value[0] == 1: # Selection 2
subprocess.Popen(["python", self.executable_path])
self.parentApp.setNextForm(None)
def on_cancel(self): # Cancel button
self.parentApp.setNextForm(None)
class App(npyscreen.NPSAppManaged):
def onStart(self): # Run program
self.addForm('MAIN', mainform, name="Enter Boot Parameter")
if __name__ == "__main__":
app = App().run()
self.answer.value[0] == 0
可以正常工作,但是其路径由文本指定。 self.answer.value[0] == 1
是即时消息使用os.path.join
定义目录路径的地方。
如果我在npyscreen
应用程序中使用该选项,则会发生这种情况。
它似乎完全忽略了该命令,并且不输出任何内容。如果我输入任何类型的一个命令,要求我重新打开该窗口,CMD窗口也会冻结。
如果我第二个选择是print(self.executable_path)
,我会明白这一点。
C:\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\jdosos.py
中没有"python"
,但这是可以预期的,因为它在subprocess.Popen
函数中,而不是self.execuatble_path
中。无论哪种方式,这都是正确的目录路径,所以我不知道为什么它不起作用。