subprocess.Popen,os.path.join和npyscreen出现问题

时间:2019-10-17 19:24:10

标签: python operating-system subprocess npyscreen

因此,我不确定该如何写标题,但是subprocess.Popenos.path.joinnpyscreen协同工作时出现问题。仅当我使用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应用程序中使用该选项,则会发生这种情况。 Directory path twice? 它似乎完全忽略了该命令,并且不输出任何内容。如果我输入任何类型的一个命令,要求我重新打开该窗口,CMD窗口也会冻结。

如果我第二个选择是print(self.executable_path),我会明白这一点。 C:\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\jdosos.py中没有"python",但这是可以预期的,因为它在subprocess.Popen函数中,而不是self.execuatble_path中。无论哪种方式,这都是正确的目录路径,所以我不知道为什么它不起作用。

0 个答案:

没有答案