Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2014 22:54:50

saw_tooth
Зарегистрирован: 2014-09-08
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

Доброго времени суток форумчане.

Проблема такова, есть программка Python под Win отлаженная скомпилированная в ехе.
В программе есть кнопка запуска другой, сторонней программы ЕХЕ (далее просто ЕХЕшник) не питоньей.
Для запуска второй программы, нужны рядом лежащие конфиг файлы.

Суть проблемы такова. Если просто запускать программу из под системы - никаких проблем, как только я пытаюсь запустить ЕХЕ из под моей программы, вторая крашится, а сообщение говорит о том что не найдены файлы конфигурации.

Иными словами, моя программа дает управление ЕХЕшнику из под своей папки, и при запуске он не видит свои конфиги, что лежат рядом. (это как понял я)

Вот код:
def start_system():
way_dir = path.normpath(path.join(getcwd(), ‘..’))
system(way_dir + ‘\\blablabla.exe’)
sys.exit(0)

Первая строка поднимает рабочий каталог вверх на одну папку
Вторая собственно открывает файл

Пробовал по разному, и юзать startfile, subprocess результат тот же. ЕХЕшник вылетает с ексепшином не найден файл.

Если, в рабочую папку скрипта (питон-программы) положить конфиги - все ок, но это не выход.

Кто может, подскажите. Заранее спасибо.

Офлайн

#2 Ноя. 2, 2014 23:35:14

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

Я так понимаю ось винда. Как запускаете программу? Если будете просто тыкать мышкой могут быть всякие чудеса.

saw_tooth
Первая строка поднимает рабочий каталог вверх на одну папку
Вот это не верно. Для изменения текущей директории (того места где программа по умолчанию ищет файлы) используйте chdir. Вы же просто формируете строку с полным именем программы.



Офлайн

#3 Ноя. 3, 2014 00:59:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

saw_tooth
Если, в рабочую папку скрипта (питон-программы) положить конфиги - все ок
Вторая программа криво написана. Конфиги должны искаться в месте расположения программы.



Отредактировано py.user.next (Ноя. 3, 2014 01:00:27)

Офлайн

#4 Ноя. 3, 2014 13:52:34

saw_tooth
Зарегистрирован: 2014-09-08
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

doza_and
Я так понимаю ось винда. Как запускаете программу? Если будете просто тыкать мышкой могут быть всякие чудеса.
Извините, может покажусь ламером. Могли бы вы подробнее описать как работать с этой функцией chdir, в туторе пусто, на иных примерах не понял, хотя обращал внимание на него.

py.user.next

Не исключено что она кривая, я в этом уверен, но суть в другом. Скрипт, когда запускает ЕХЕшник, говорит ему о его положении как я понял, и вот оно не совпадает с настоящим, поэтому ЕХЕ не видит свои файлы.





Офлайн

#5 Ноя. 3, 2014 14:56:36

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

import os
os.chdir(r"c:\dirof\prog")



Офлайн

#6 Ноя. 3, 2014 15:01:41

saw_tooth
Зарегистрирован: 2014-09-08
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

doza_and

Опять нубский вопрос, у меня не статический путь, скрипт будет исполнятся на различных компах

Изменить в вашем коде путь на getcwd()?

Офлайн

#7 Ноя. 3, 2014 15:26:47

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

getcwd неправильно использовать. Какое отношение имеет текущая директория к расположению вашего исполняемого модуля? Скрипт легко может быть запущен (и как правило запускается) не из той папки где он лежит.

Надо или из конфигурационного файла читать ее расположение
Или брать папку в которой расположен скрипт (если вы их всегда будете рядом располагать).
Если не ищете сложностей то рекомендую “unix way” напишите скрипт который будет ставить ваше хозяйство в предопределенную папку (глобально или в home пользователя). Тогда будете получать путь так:

import os
hd=os.environ["HOME"]
path=os.path.join([hd,"my_prog_folder/a.exe"])

Правильный пусть написать инсталлятор для ваших 2 файлов, сделать дистрибутив
и дальше получать путь при помощи:
import pkg_resources
my_executable = pkg_resources.resource_string("you_pack_name", "foo.exe")
Чтобы в этом разобраться надо прочитать
https://docs.python.org/2/distutils/
https://pythonhosted.org/setuptools/easy_install.html
http://pip.readthedocs.org/en/latest/installing.html

Простой путь - получить имя файла содержащего ваш модуль и прилепить к нему имя программы.
Извините может поначалу это покажется не очень просто.



Отредактировано doza_and (Ноя. 3, 2014 15:31:43)

Офлайн

#8 Ноя. 3, 2014 17:18:13

saw_tooth
Зарегистрирован: 2014-09-08
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

Да, весьма тяжеловато дается.

Попробую так.

Есть такой путь:
С:\test\program - тут ЕХЕшник
C:\test\program\script - тут питончик (оговорюсь, скрипт скомпилирован в ЕХЕ с помощью cx_Freezy)

Вот скрип и запускает ЕХЕ файл. Программы независимы и нельзя их передавать в обобщеном виде.
так вот в зависимости от компов, кусок пути /test/ может варьироваться, и не всегда постоянный, поэтому я и пытался получить путь рабочей папки, что бы потом передать его на путь запуска ЕХЕшника.

doza_and, может черкните скайп, пообщаемся)

UPD. Что то управление на форуме противоречит нормальному смыслу.
UPD2. Мой контакт соответствует нику




Отредактировано saw_tooth (Ноя. 3, 2014 17:26:50)

Офлайн

#9 Ноя. 3, 2014 19:25:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

saw_tooth
Не исключено что она кривая, я в этом уверен, но суть в другом. Скрипт, когда запускает ЕХЕшник, говорит ему о его положении как я понял, и вот оно не совпадает с настоящим, поэтому ЕХЕ не видит свои файлы.
Вторая программа неправильно определяет путь для своих конфигов. Независимо от способа запуска она должна находить свои конфиги там, где они находятся.

А пока делай os.chdir() в запускающем скрипте в то место, где находится запускаемая программа. Хотя лучше отослать вторую программу её создателю.



Офлайн

#10 Ноя. 3, 2014 20:20:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Проблема. Запуск EXE-файла из скрипта

import sys,os
import subprocess as sp
cwd=os.getcwd()
os.chdir(os.path.join(os.path.dirname(sys.argv[0]),".."))
sp.check_call("x.exe")
cwd=os.chdir(cwd)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version