Определение емкости буфера pty

У меня те же проблемы, --exclude='. *' отлично работает в MacOS, но не в Linux. Вы можете сделать,

tar -vcf everything.tar. --exclude='./.*' --exclude='test_tree'

Или

tar -vcf everything.tar. --exclude='.[^/]*' --exclude='test_tree'

0
01.10.2019, 20:21
1 ответ

Я думаю, что нашел одно решение, хотя я не уверен, обязательно ли оно идеально.

Мы можем отредактировать сценарий, чтобы установить мастера pty в неблокирующий -режим:

import fcntl

...

for app in all_apps:
    app_master, app_slave = pty.openpty()

    flags = fcntl.fcntl(app_master, fcntl.F_GETFL)
    flags |= os.O_NONBLOCK
    fnctl.fcntl(app_master, fcntl.F_SETFL, flags)

Затем, всякий раз, когда мы записываем в мастер, если запись обычно блокируется, мы можем поймать BlockingIOErrorдля продолжения:

            # (try to) send the message to each application
            try:
                os.write(app_fd, data)
            except BlockingIOError:
                print("Caught BlockingIOError")

Это не решает фундаментальной проблемы, заключающейся в том, что приложения могут неправильно себя вести и не читать свои последовательные порты, но при таком решении сценарий, по крайней мере, продолжит выполнять свою работу. Цена заключается в том, что некоторые данные могут быть потеряны (, передаваемые приложениям, которые не используют свой порт ).

1
28.04.2021, 23:28

Теги

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