Использование 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'))
Другие вопросы по тегам