У меня те же проблемы, --exclude='. *' отлично работает в MacOS, но не в Linux. Вы можете сделать,
tar -vcf everything.tar. --exclude='./.*' --exclude='test_tree'
Или
tar -vcf everything.tar. --exclude='.[^/]*' --exclude='test_tree'
Я думаю, что нашел одно решение, хотя я не уверен, обязательно ли оно идеально.
Мы можем отредактировать сценарий, чтобы установить мастера 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")
Это не решает фундаментальной проблемы, заключающейся в том, что приложения могут неправильно себя вести и не читать свои последовательные порты, но при таком решении сценарий, по крайней мере, продолжит выполнять свою работу. Цена заключается в том, что некоторые данные могут быть потеряны (, передаваемые приложениям, которые не используют свой порт ).