Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 2, 2021 11:30:08

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как освободить ком порт

Здравствуйте
Вопрос такого плана.
Написал скриптик который опрашивает ардуинку по ком порту.
Иногда ардуинка неправильно отвечает(как именно я еще разбираюсь) и скриптик зависает. Скриптик закрывается и все , теперь до следующей перегрузки я не могу воспользоваться ком портом. Ошибка отказано в доступе. Я пытаюсь прибить процесс
python в диспетчере задач, но он процесс никак не прибивается. Как мне освободить комп порт от плена зависшего скрипта python?

Офлайн

#2 Авг. 2, 2021 11:39:06

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

Как освободить ком порт

ingfa_1981
Я пытаюсь прибить процесс
python в диспетчере задач, но он процесс никак не прибивается.
1. Что значит не прибивается? Как это выглядит?
2. Как вы запускаете процесс? От какого пользователя?
3. Вы хотите чтобы мы починили скрипт не видя его? По уму скрипт сам должен следить за тем чтобы завершиться в случае неудачек разного уровня. Чтото у вас там неправильно реализовано.



Офлайн

#3 Авг. 2, 2021 12:09:43

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как освободить ком порт

1. ALT CTRL DEL завершить процесс python.exe
2. Запускаю процесс от имени администратора винды win7 и завершаю процесс тоже от имени администратора.
3. Точно надо дописать ser.close в except. Да суть вопроса то не в скрипте я думаю больше в том как
прибить процесс. И чего это он не завершается даже администратором системы.

Офлайн

#4 Авг. 2, 2021 12:22:54

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как освободить ком порт

 import serial
import numpy as np
import time
nesushaya = 3400000.00
listChastot = [711.19, 703.89, 714.56, 702.58, 1339.06, 831.99, 1219.29, 1026.77, 967.92,905,93]
ser = serial.Serial(port='COM35', baudrate=115200, writeTimeout=0)
while True:
    for i in listChastot:
        print(("$&a{0}&b{1}&c{2}#".format(nesushaya, nesushaya - i, nesushaya + i)))
        try:
            ser.write(("$&a{0}&b{1}&c{2}#".format(nesushaya,nesushaya-i,nesushaya+i)).encode())
            time.sleep(1)
        except:
            ser.close()
            break
ser.close()

Офлайн

#5 Авг. 2, 2021 14:42:10

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

Как освободить ком порт

ingfa_1981
И чего это он не завершается даже администратором системы.
Винда дело темное. У меня ее нет, и вам не советую. Некоторые тут высказываются что 2/3 времени при работе под виндой тратятся на преодоление глюков и нелогичностей в самой Винде.

Я бы рекомендовал почаще использовать менеджеры контекста. Если будет такая привычка, то проблем с освобождением ресурсов будет на порядок меньше.
https://pyserial.readthedocs.io/en/latest/shortintro.html
 #Also supported with context manager:
with serial.Serial() as ser:
    ser.baudrate = 19200
    ser.port = 'COM1'
    ser.open()
    ser.write(b'hello')



Отредактировано doza_and (Авг. 2, 2021 14:44:51)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version