Использование Python 2.7 для вызова приложения в подпапке папки, содержащей.py
Мне было интересно, если есть способ вызвать внешнее приложение, которое находится в подпапке существующей папки (чтобы выглядеть как рисунок 1, а не рисунок 2). Я знаю, что я могу открыть определенный путь к файлу, однако мне нужно, чтобы он работал на ЛЮБОМ компьютере, когда папка находится в ЛЮБОМ каталоге, что просто не сработало бы, когда на другом компьютере.
Рисунок 1: https://gyazo.com/4c98428836e03e0b7a3e2c6bf2c0d9e1
Рисунок 2: https://gyazo.com/8e0263ee7918e2fa26653a1dcc6187c7
В настоящее время я использую код, который выглядит следующим образом, чтобы запустить их, но он работает, только когда он находится в той же папке:
def Button3():
os.startfile('procexp.exe')
def Button4():
os.startfile('IJ.exe')
def Button5():
os.startfile('Br.exe')
def Button6():
os.startfile('Cs.exe')
Извините, если это кажется чем-то вроде вопроса новичка, но это действительно помогло бы мне, если бы я получил ответ на этот вопрос.
2 ответа
Просто добавьте относительный путь:
.
означает запуск с текущего рабочего каталога (обычно это место, откуда запускается программа).
Итак, если вы запускаете основную программу из той же папки, в которой она находится:
def Button3():
os.startfile('./resources/procexp.exe')
def Button4():
os.startfile('./resources/IJ.exe')
def Button5():
os.startfile('./resources/Br.exe')
def Button6():
os.startfile('./resources/Cs.exe')
Однако обычно это не так, в большинстве случаев вы запускаете программу из любой точки мира (либо потому, что она находится в вашей среде PATH), либо указав полный путь к ней. В этом случае вы хотите выяснить, где установлена программа, а затем выяснить, куда вы помещаете ресурсы относительно нее:
специальная переменная __file__
содержит, где ваш скрипт включает в себя путь к нему. Вы можете получить имя каталога с помощью dirname
метод в os.path
пакет:
program_dir = os.path.dirname(__file__)
Затем вы можете работать относительно этого:
resource_dir = os.path.join(program_dir, 'resources')
os.path.join
способ объединить биты пути агоническим способом операционной системы
Так что в итоге ваша программа может стать:
resource_dir = os.path.join(os.path.dirname(__file__), 'resources');
def Button3():
os.startfile(os.path.join(resource_dir, 'procexp.exe'))
def Button4():
os.startfile(os.path.join(resource_dir, 'IJ.exe'))
def Button5():
os.startfile(os.path.join(resource_dir, 'Br.exe'))
def Button6():
os.startfile(os.path.join(resource_dir, 'Cs.exe'))
и т.п.
Конечно, чтобы использовать os.path, вам нужно импортировать его:
import os;
Вы должны указать путь и можете использовать модуль sys, например, так
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), 'relative_path_to_your_file'))