2
Следующая всегда терпит неудачу:fcntl.ioctl всегда терпит неудачу на Python 2
import fcntl
import termios
buffer = bytearray(8)
fcntl.ioctl(2, termios.TIOCGWINSZ, buffer, True)
Всегда терпит неудачу с:
Traceback (most recent call last):
File "testit.py", line 5, in <module>
fcntl.ioctl(2, termios.TIOCGWINSZ, buffer, True)
TypeError: ioctl requires a file or file descriptor, an integer and optionally an integer or buffer argument
- Первый аргумент тривиальным отвечает "дескриптор файла" критерии.
termios.TIOCGWINSZ
== 21523, целое число- Третий аргумент - это буфер.
Почему? Он отлично работает в Python 3, но, увы, мы используем Python 2 в производстве.
Edit: Это очень похоже на Python's issue #10345, за исключением того, в отличие от файлере этой ошибки, я утра используя изменяемый буфер.
Хорошо ... почему это работает? Документы утверждают: «или объект, поддерживающий интерфейс буфера чтения и записи» - не поддерживает ли 'bytearray' это? (Только в Python 2?) – Thanatos
[Документы] (https://docs.python.org/2/library/fcntl.html#fcntl.ioctl) в разделе примера предполагают, что модуль 'array' должен использоваться для изменяемого буфера. Например. 'bytearray' не имеет метода' buffer_info', который возвращает указатель, который хочет 'fcntl'. 'ctypes' также работают:' buf = (ctypes.c_byte * 4) (0, 0, 0, 0) ', передать его вызову и посмотреть, что показывает' list (buf) '. Вероятно, Python3 просто научился делать этот трюк с 'bytearray' за кулисами, хотя я не мог с готовностью найти информацию об этом. – 9000