Запустите внешнюю программу без жесткого определения пути
Я делаю графический интерфейс, который должен работать на разных компьютерах. В скрипте мне нужно открыть внешнюю программу и запустить макрос через эту программу. Я использую подпроцесс для этого. Проблема в том, что без жесткого кодирования пути я не могу найти программу. Я не могу жестко закодировать путь, потому что программа может находиться в разных каталогах на разных компьютерах. Возможно ли это сделать?
Код:
from subprocess import *
def call_dos(self, program, *args):
proc = call([program, args])
if proc:
logging.warning('Calling failed')
else:
logging.info('Calling successful')
def partone(self, *args):
try:
self.call_dos("Myprogram.exe", r"C:\Mymacro.mko")
finally:
self.partone()
Сообщение об ошибке:
Traceback:
'Calling failed'
Спасибо за любые ответы!
1 ответ
Вы должны проверить это Myprogram.exe
вызывается, то есть в системном пути.
Для окон, либо установите его в пользовательской или системной среде, добавив фактический каталог, где находится исполняемый файл в PATH
переменная окружения.
Чтобы пользователи не обвиняли вашу программу в неправильной установке, вы можете добавить проверку, чтобы ошибка была понятна человеку:
import distutils.spawn
if not distutils.spawn.find_executable("Myprogram.exe"):
raise Exception("{} is not in the path, add it to path and retry".format("Myprogram.exe"))
Вы также можете распространять программу вместе со своим скриптом (в том же каталоге), так что вы уверены, что он найден (если не требуется глубокая установка). В этом случае сделайте:
self.call_dos(os.path.join(os.path.dirname(__file__),"Myprogram.exe"), r"C:\Mymacro.mko")