Итак, я не совсем уверен, как произнести название, но у меня проблема с 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
. В любом случае, это правильный путь директокрити, поэтому я не знаю, почему он не работает.