Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2016 06:25:44

74LS00
Зарегистрирован: 2016-08-04
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

нужнно запустить внешнюю программу

Есть чужая программа, но вместо функции заглушка https://github.com/dhowland/EasyAVR

В 194 строке выдаёт сообщение и только
https://github.com/dhowland/EasyAVR/blob/master/keymapper/easykeymap/programming.py
Фрагмент

 class AvrdudePosix(ProgrammingTask):
    description = "Upload to USB AVR with AVRdude"
    windows = False
    posix = True
    teensy = False
    loader_tools = [
    ]
    def run(self):
        self.logger("Not implemented.")

Я вписал кусок, но толку с этого мало
 loader_tools = [
	'avrdude.exe',
	'avrdude',
	'avrdude.bat',
    ]
С питоном дела не имел.
Пробовал добавлять нечто нагугленое, но сначало открывается блокнот, а потом сама программа и больше это не работает
import os
os.system('notepad.exe')
Пробовал копировать из других частей, но тогда совсем не работает.

Как сделать чтоб при нажати кнопки Run запускался внешний батник?
Скорее всего не реализовали потомучто очень много параметров.

Прога запускается с корня run.bat (на 2 уровня выше) , чтоб появилось это окно надо в меню File выбрать чтото в 1 пункте, потом в предпоследний и сохранить файл.


Отредактировано 74LS00 (Авг. 4, 2016 06:32:53)

Офлайн

#2 Авг. 4, 2016 09:05:37

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

нужнно запустить внешнюю программу

74LS00
Как сделать чтоб при нажатии кнопки Run запускался внешний батник?
Вам надо обращаться к автору кода а не на форум.
Я по диагонали посмотрел код. Качество документации и кода не очень высокое. Скорее всего этим никто кроме автора и еще 2-3 человек и не пользуется.

По документации не хватило ума понять для чего данная фиговина нужна.

Если вам надо автоматизировать билд то это делается при помощи одного из средств - make, cmake, scons

Вот примерчики как народ пользуется http://stackoverflow.com/questions/4093843/running-avrdude-commands-as-scons-targets
https://github.com/asheidan/SCons-tools/blob/master/avrdude.py



Офлайн

#3 Авг. 4, 2016 12:19:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

нужнно запустить внешнюю программу

> Скорее всего не реализовали потомучто очень много параметров.

Скорее всего ещё не успели.

> Как сделать чтоб при нажати кнопки Run запускался внешний батник?

Посмотри как сделан метод run у класса выше.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#4 Авг. 4, 2016 14:51:57

74LS00
Зарегистрирован: 2016-08-04
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

нужнно запустить внешнюю программу

doza_and
Вам надо обращаться к автору кода а не на форум.
Врятли автор меня поймёт https://geekhack.org/index.php?topic=51252.0
Программа редактирует hex прошивки.
У меня другое железо , чтоб найти где править надо часто шить контролер, перезапускать прогу и запускать батник вручнную долго.
Схема от старых исходников (много букв) не подошла, гдето попутаны ноги, поэтому искал наугад , но она оказалась 6KRO, хотелось бы весь функционнал.

Пользуются они другим програматором, но уж очень он кривой и у меня не работают, они используют мак, может поэтому. К avrdude уже привык да и проще с ней, но для запуска надо указывать разные парамаетры, поэтому хотелось бы их хотябы в батник чтоб порт не менять.
 class AvrdudePosix(ProgrammingTask):
    description = "Upload to USB AVR with AVRdude"
    windows = True
    posix = True
    teensy = False
    loader_tools = [
'G:\\home\\Documents\\Projects\\EAGLE\\Keyboard\\EasyAVR\\avrdude\\avrdude.bat'
    ]
#        self.logger("Not implemented.")
    def run(self):
        if self.info.binformat:
            raise ProgrammingException("Avrdude requires a build in HEX format.")
        if self.tool_path is None:
            raise ProgrammingException("Can't find Avrdude executable.")
        self.bootmsg(self.logger)
        cmd = ('"%s" %s') % (
            self.tool_path, self.info.device.lower(), self.info.filename)
        self.execute(cmd)
Попробовал дописать так. В батник прописал запуск блокнота.
При запуске этого пункта показывает сообщение из 133 строки, слышен звук ошибки и повисает.
Если loader_tools не существует обычно просто повисает не смотря на строки которые похоже не работают
  if self.tool_path is None:
            raise ProgrammingException("Can't find Avrdude executable.")
Значит батник она запустить пытается и виснет гдето дальше.
Есть подозрение что недописано гдето ещё

Отредактировано 74LS00 (Авг. 4, 2016 14:56:10)

Офлайн

#5 Авг. 5, 2016 01:58:11

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

нужнно запустить внешнюю программу

74LS00
Пробовал добавлять нечто нагугленое, но сначало открывается блокнот, а потом сама программа и больше это не работает
import os
os.system('notepad.exe')
Надо попробовать через subprocess.Popen().

  
import subprocess
 
def f():
    subprocess.Popen('notepad.exe')
    print('x')
    subprocess.Popen('notepad.exe')
    print('y')
 
f()



Отредактировано py.user.next (Авг. 5, 2016 02:02:10)

Офлайн

#6 Авг. 5, 2016 08:12:29

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

нужнно запустить внешнюю программу

Пока видно что никто из форумчан этой прогой не пользовался. Что тут посоветуешь. Учите питон, делайте форк проекта, осваивайте отладчик (pyscripter или pycharm), учите английский и общайтесь с автором.

Задавайте вопросы на форуме, но моделируйте как мы будем отвечать.

74LS00
Как сделать чтоб при нажати кнопки Run запускался внешний батник?
Как мы ответим? Программу никто ставить не собирается. Что за кнопка мы и близко понятия не имеем.

74LS00
но сначало открывается блокнот, а потом сама программа и больше это не работает

Интересно зачем вам блокнот? А самое таинственное дальше “это не работает”. Что это? программа и блокнот запустились. Если оно сломалось принято traceback ошибки показывать.

Ну и так далее….

Внешние программы запускаются легко. Это или os.system или один из методов subprocess. причем можно запустить и подождать завершения внешней программы (как system) а можно и не ждать. Второе. Запускать программы можно с аргументами командной строки см ключик shell или разбивайте команду в список. т.е. внешний батник для передачи аргументов не особо нужен.



Офлайн

#7 Авг. 5, 2016 18:56:53

74LS00
Зарегистрирован: 2016-08-04
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

нужнно запустить внешнюю программу

Мне бы хотябы понять как ошибки увидить, а то вылетает 3 раза жалуясь на сам python .
Прога запускается из батника командой python -m easykeymap.gui где easykeymap папка, а gui файл gui.py , что для меня совсем не очевидно, думал такой класицизм только в яве.

Программу никто ставить не собирается. Что за кнопка мы и близко понятия не имеем.
Я думал возможно вам хватит исходников файла, хотя видимо это не тот язык чтоб соазу былдо понятно.

Интересно зачем вам блокнот
всётаки внешняя программу которую виднно, работу консольной я точно не увижу.
Вот именно что запустилась, но не тогда когда я нажал на кнопку, а до того как сама программа на питоне заработала, да и то после того как я блокнот закрыл. И после запуска уже на кнопку не реагировала.

Как я понимаю из этой функции внешняя программа только вызывается, а её работы ожидается дальше, и там тоже чтото не так.
Поставил кое как другой програматор, софтово он работает, на всё уходит несколько секунд (хоть я и не могу завести железо после него)
dfu-programmer.exe atmega32u4 erase –force
Erasing flash… Success
Checking memory from 0x0 to 0x6FFF… Empty.

dfu-programmer.exe atmega32u4 flash EasyAVR\keymapper\tmp.hex
Checking memory from 0x0 to 0x687F… Empty.
0% 100% Programming 0x6880 bytes…
Success
0% 100% Reading 0x7000 bytes…
Success
Validating… Success
0x6880 bytes written into 0x7000 bytes memory (93.30%).

dfu-programmer.exe atmega32u4 reset
Но в проге отображается только первая строчка из 3 команд и уже через эти несколько секунд он повисает

Мне кажется её на окнах даже не тестировали. Разве владелец нормального компьютера будет покупать себе за 100 баксов клавиатуру

Отредактировано 74LS00 (Авг. 5, 2016 19:57:56)

Офлайн

#8 Авг. 5, 2016 20:45:00

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

нужнно запустить внешнюю программу

74LS00
Мне бы хотябы понять как ошибки увидить, а то вылетает 3 раза жалуясь на сам python
74LS00
всётаки внешняя программу которую виднно, работу консольной я точно не увижу.
Почему не увидите ошибки? Почему вывод консольной программы не увидите. Запускайте программу из консоли и будет все видно.

А вообще уже намекал. пользуйтесь отладчиком чтобы понять откуда ошибки лезут.
74LS00
вылетает 3 раза жалуясь на сам python .
Ну так вы хоть раз сообщение об ошибке пришлите. откуда нам знать что у вас происходит.
74LS00
хотя видимо это не тот язык чтоб сазу былдо понятно.
При таких объяснениях ни в одном языке ни капли не будет понятно.
74LS00
Как я понимаю из этой функции
Вам надо искать либо обработчик события кнопки по имени кнопки Run либо по команде которую она выполняет (если конечно вы знаете что там выполнялось).



Офлайн

#9 Авг. 5, 2016 21:52:46

74LS00
Зарегистрирован: 2016-08-04
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

нужнно запустить внешнюю программу

Это скорее оффтоп, но не найдя понятного решения решил сразу получить конечный результат.

Пошёл старым методом и удалил из таблицы всё чего у меня нет в железном виде и методом тыка удалось найти то что я 2 раза опровергал, хотя и с прошлой прошивкой было также, но там таблица была более очевидной.
Нащупал ноги, нарисовал таблицу, теперь получил полное NKRO как и хотел и о питоне пока можно забыть. Но то был простой нумпад с 24 кнопками , а нужно ещё 2 блока где кнопок более 40 и всё это в туже прошивку.
Не быстрое дело: редактирую .py , запускаю прогу через батник, экспортирую прошивку, и вот если бы тут прога запустила програматор и упало было бы даже хорошо, потому как после прошивки её всё равно перезапускать чтоб собрался новый .pyc. Ну а так запускаю батник прошивки, редактирую таблицу и уже закрываю прогу.
Фактически этот програматор и был бы удобнее для правки этой таблицы, а после не думаю что ктото будет подстраивать клавиши ищя идеальное расположение.

Изучать то в чём не понимаешь не очень то и хочется, для меня важнее железная часть.
С моим умом програмирование дальше редактированния таблиц обычно не доходит, да и не требуется, учил год назад autoit потому что надоело играть в пиратку мморпг унылым честным способом, заоднно и под другую написал костыль, а теперь всё забыл и свой код понять не могу хоть и коментирован.
Слишком много времени занимает весь этот кодинг.

Трудно делать то что не представляешь каким должно быть, сейчас ковыряя прошивку понял что кнопки / * должны быть горизонтально и именно так потому как по другому не удобно коментировать, и сишники писали это под готовое железо.

Офлайн

#10 Авг. 6, 2016 03:11:12

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

нужнно запустить внешнюю программу

74LS00
а теперь всё забыл и свой код понять не могу хоть и коментирован.
Лучший комментарий - тот, которого нет. Ниндзя-комментарии их ещё называют. Это набор навыков написания кода таким образом, что он легко понятен без комментариев.
При этом комментарии всё-таки пишутся, но описывается в них то, почему или зачем написан такой-то кусок кода.

74LS00
Слишком много времени занимает весь этот кодинг.
Да, есть сисадминство и есть программирование. Обе области большие (по количеству материала) и совершенно не пересекаются. Иногда сисадминам кажется, что они уже и программировать могут автоматически, раз они сисадминят прилично. Но практика показывает, что их код так себе - то есть ломается при первом же ветре.



Отредактировано py.user.next (Авг. 6, 2016 03:14:26)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version