как использовать/dev/ptmx для, создают виртуальный последовательный порт?

У меня есть программа, с помощью 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 создается как пара виртуального последовательного порта.

6
задан linjunhalida 2 February 2010 в 05:24
поделиться

4 ответа

В соответствии с документами, чтобы получить имя ведомой стороны псевдотерминала, а также, цитируя документы

, перед открытием псевдотерминала, необходимо ptsname. раб, ты должен передать файл хозяина. дескриптор гранта(3) и разблокировать(3).

Вы должны иметь возможность использовать типы для вызова всех необходимых функций.

3
ответ дан 10 December 2019 в 00:38
поделиться

Я не знаю Python, но я могу указать вам в правильном направлении: посмотрите здесь в образце кода C. Вот страница Man для / dev / ptmx. Убедитесь, что разрешения и владелец правильны! Вот плакат на LinuxQuestions Форум о том, как его использовать из C.

1
ответ дан 10 December 2019 в 00:38
поделиться

Вы можете построить пустынный объект, который реализует тот же интерфейс, что и 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

Если это доводы, как утка, и это утки, как утка ...

0
ответ дан 10 December 2019 в 00:38
поделиться

Для вычисления в запросе SELECT можно использовать UNIX _ TIMESTAMP .

SELECT (UNIX_TIMESTAMP(endDate)-UNIX_TIMESTAMP(startDate))/3600 hour_diff
  FROM tasks

UNIX _ TIMESTAMP преобразует значение datetime в число секунд из эпохи. Можно наложить обе временные метки, чтобы получить разницу в секунду. Делите его на 3600 даст вам разницу в часах.

-121--1220152-
  1. Хотя, безусловно, есть случай для удаленной отладки вы всегда должны работать локально, а затем загрузить. Все, кроме самых незначительных изменений, должно быть выполнено локально протестировано, а затем перемещено на сервер - иногда непосредственно производство, иногда тестовый сервер...
  2. Да Eclipse поддерживает удаленную отладку с помощью Xdebug, а также из Zend Debugger проверьте ссылки Джастина, а также Это для Zend Debugger . Я думаю, что Zend имеет все в одном с pdt + deps и Zend Debugger - конечно, вам все еще нужно настроить расширение на сервере (примечание ссылка для установки в окнах, но процесс должен быть похожим).
  3. Обязательное "Ewww GoDaddy": -)
-121--4378810-

Вместо этого следует использовать модуль pty , который должен позаботиться об этом для вас. (он открывает/dev/ptmx или вызывает openpty или открывает другое подходящее устройство в зависимости от платформы.)

0
ответ дан 10 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: