У меня есть программа, с помощью pyserial, и я хочу протестировать ее, не используя реальное устройство последовательного порта.
В окнах я использую com0com, и в Linux, я знаю, что существует метод для создания пары виртуального последовательного порта, не используя дополнительную программу.
таким образом, я ищу руководство и найденный pts,/dev/ptmx, но я не знаю, как создать пару следующим руководство, кто-либо может дать мне пример?
Я попробовал (в Python):
f = open("/dev/ptmx", "r")
и это работает,/dev/pts/4 создается.
и я попробовал:
f = open("/dev/4", "w")
и результат:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 5] Input/output error: '/dev/pts/4'
править: Я нашел решение (workround), с помощью socat.
socat PTY,link=COM8 PTY,link=COM9
затем COM8 COM9 создается как пара виртуального последовательного порта.
В соответствии с документами, чтобы получить имя ведомой стороны псевдотерминала, а также, цитируя документы
, перед открытием псевдотерминала, необходимо ptsname. раб, ты должен передать файл хозяина. дескриптор гранта(3) и разблокировать(3).
Вы должны иметь возможность использовать типы
для вызова всех необходимых функций.
Я не знаю Python, но я могу указать вам в правильном направлении: посмотрите здесь в образце кода C. Вот страница Man для / dev / ptmx. Убедитесь, что разрешения и владелец правильны! Вот плакат на LinuxQuestions Форум о том, как его использовать из C.
Вы можете построить пустынный объект, который реализует тот же интерфейс, что и Pyserial
.
Например:
class DummySerial():
#you should consider subclassing this
def __init__(self, *args, **kwargs):
self.fIn = open("input.raw", 'r')
self.fOut = open("output.raw", 'w')
pass
def read(self, bytes = 1):
return self.fIn.read(bytes)
def write(self, data):
self.fOut.write(data)
def close(self):
self.fIn.close()
self.fOut.close()
#implement more methods here
Если это доводы, как утка, и это утки, как утка ...
Для вычисления в запросе SELECT можно использовать UNIX _ TIMESTAMP .
SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
FROM tasks
UNIX _ TIMESTAMP преобразует значение datetime в число секунд из эпохи. Можно наложить обе временные метки, чтобы получить разницу в секунду. Делите его на 3600 даст вам разницу в часах.
-121--1220152- Вместо этого следует использовать модуль pty
, который должен позаботиться об этом для вас. (он открывает/dev/ptmx или вызывает openpty
или открывает другое подходящее устройство в зависимости от платформы.)