subprocess.Popen, os.path.join и npyscreen, имеющие проблемы - PullRequest
0 голосов
/ 17 октября 2019

Итак, я не совсем уверен, как произнести название, но у меня проблема с 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, это то, что происходит. Directory path twice? Кажется, что он полностью игнорирует команду и ничего не выводит. Окно CMD также замерзнет, ​​если я введу одну команду любого типа, требующую от меня повторного открытия окна.

Если я print(self.executable_path), второй вариант, я получу это. C:\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\jdosos.py В нем нет "python", но это ожидаемо, потому что это в функции subprocess.Popen, а не self.execuatble_path. В любом случае, это правильный путь директокрити, поэтому я не знаю, почему он не работает.

...