Ose error python

В разделе представлены исключения, которые возникают в результате ошибок, возникающих в ходе взаимодействия приложения Python и операционной системы и являются подклассами OSError.

В разделе представлены исключения, которые возникают в результате ошибок, возникающих в ходе взаимодействия приложения Python и операционной системы и являются подклассами OSError.

Содержание:

  • Базовый класс исключений OSError
  • Исключение OS BlockingIOError,
  • Исключение OS ChildProcessError,
  • Исключение OS ConnectionError,
    • Исключение OS BrokenPipeError,
    • Исключение OS ConnectionAbortedError,
    • Исключение OS ConnectionRefusedError,
    • Исключение OS ConnectionResetError,
  • Исключение OS FileExistsError,
  • Исключение OS FileNotFoundError,
  • Исключение OS InterruptedError,
  • Исключение OS IsADirectoryError,
  • Исключение OS NotADirectoryError,
  • Исключение OS PermissionError,
  • Исключение OS ProcessLookupError,
  • Исключение OS TimeoutError.

OSError([arg]):

OSError(errno, strerror[, filename[, winerror[, filename2]]]):

Исключение OSError() возникает, когда системная функция возвращает системную ошибку, включая сбои ввода-вывода, типа таких, как «файл не найден» или «диск заполнен». Не срабатывает для недопустимых типов аргументов или других случайных ошибок.

Вторая форма конструктора устанавливает соответствующие атрибуты. У всех атрибутов по умолчанию None если атрибут не указан. Для обратной совместимости, если переданы три аргумента, атрибут args содержит только 2 кортежа из первых двух аргументов конструктора.

Конструктор часто фактически возвращает подкласс OSError, как описано в исключениях ОС ниже. Конкретный подкласс зависит от конечного значения errno. Это поведение имеет место только при построении OSError напрямую или через псевдоним и не наследуется при создании подклассов.

Аргументы исключения OSError()

:

  • errno — Числовой код ошибки из переменной C errno

  • winerror — В Windows это дает вам собственный код ошибки Windows. Атрибут errno тогда является приблизительным переводом, в терминах POSIX, это нативный код ошибки.

    В Windows, если аргумент конструктора winerror является целым числом, атрибут errno определяется из кода ошибки Windows, а аргумент errno игнорируется. На других платформах аргумент winerror игнорируется, а атрибут winerror не существует.

  • strerror — Соответствующее сообщение об ошибке, предоставленное операционной системой. Он отформатирован функциями языка C perror() под POSIX и FormatMessage() под Windows.

  • filename и filename2 — Для исключений, которые включают путь к файловой системе, например open() или os.unlink(). filename — это имя файла, передаваемое функции. Для функций, которые включают два пути файловой системы, например, os.rename(), filename2 — соответствует второе имя файла, переданное функции.


Исключения подкласса OSError.

Ниже перечисленные исключения, являются подклассом OSError() и возникают в зависимости от системного кода ошибки.

BlockingIOError:

Исключение BlockingIOError поднимается, когда операция блокирует объект (например, сокет), установленный для неблокирующей операции. Соответствует errno EAGAIN, EALREADY, EWOULDBLOCK и EINPROGRESS.

В дополнение к таковым OSError, BlockingIOError может иметь еще один атрибут:

  • characters_written — целое число, содержащее количество символов, записанных в поток до его блокировки. Этот атрибут доступен при использовании буферизованных классов ввода/вывода из io модуля.

ChildProcessError:

Исключение ChildProcessError поднимается при сбое операции с дочерним процессом. Соответствует errno ECHILD.

ConnectionError:

Исключение ConnectionError это базовый класс для вопросов, связанных с подключением.

Подклассы ConnectionError:

  • BrokenPipeError:

    Исключения BrokenPipeError это подкласс ConnectionError, возникающий при попытке записи в канал, когда другой конец был закрыт, или при попытке записи в сокет, который был отключен для записи. Соответствует errno EPIPE и ESHUTDOWN.

  • ConnectionAbortedError:

    Исключения ConnectionAbortedError это подкласс ConnectionError, возникает, когда попытка соединения прерывается партнером. Соответствует errno ECONNABORTED.

  • ConnectionRefusedError:

    Исключения ConnectionRefusedError это подкласс ConnectionError, возникающий, когда одноранговый узел отклоняет попытку подключения. Соответствует errno ECONNREFUSED.

  • ConnectionResetError:

    Исключения ConnectionResetError это подкласс ConnectionError, возникающий при сбросе соединения узлом. Соответствует errno ECONNRESET.

FileExistsError:

Исключение FileExistsError поднимается при попытке создать файл или каталог, который уже существует. Соответствует errno EEXIST.

FileNotFoundError:

Исключение FileNotFoundError поднимается, когда файл или каталог не существует. Соответствует errno ENOENT.

InterruptedError:

Исключение InterruptedError поднимается, когда системный вызов прерывается входящим сигналом. Соответствует errno EINTR.

Python-3.5: Python теперь повторяет системные вызовы, когда системный вызов прерывается сигналом, кроме случаев, когда обработчик сигнала вызывает исключение вместо возбуждения InterruptedError.

IsADirectoryError:

Исключение IsADirectoryError поднимается, когда к каталогу применяется файловая операция, например os.remove(). Соответствует errno EISDIR.

NotADirectoryError:

Исключение NotADirectoryError возникает, когда совершается попытка операции с каталогом, например os.listdir(), а на самом деле путь не является каталогом. Соответствует errno ENOTDIR.

PermissionError:

Исключение PermissionError поднимается при попытке запустить операцию без соответствующих прав доступа — например, прав доступа к файловой системе. Соответствует errno EACCES и EPERM.

ProcessLookupError:

Исключение ProcessLookupError поднимается, когда данный процесс не существует. Соответствует errno ESRCH.

TimeoutError:

Исключение TimeoutError поднимается, когда время ожидания системной функции на системном уровне. Соответствует errno ETIMEDOUT.

1. Purpose

In this post, I would demo how to solve the below exception or error when using python:

Traceback (most recent call last):
  File "generate_png_transparent_demo.py", line 43, in <module>
    generate_png_transparent("./images/a.png","hello world")
  File "generate_png_transparent_demo.py", line 37, in generate_png_transparent
    d.text((10,25), the_text, fill=(255, 0, 0),font=get_font(the_text))
  File "generate_png_transparent_demo.py", line 21, in get_font
    font = ImageFont.truetype("arial.ttf", fontsize)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 852, in truetype
    return freetype(font)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 849, in freetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 210, in __init__
    font, size, index, encoding, layout_engine=layout_engine
OSError: cannot open resource

2. The Environment

  • Python 3
  • MacOS

3. The code

3.1 The project directory structure

Our working directory name is myscript, this is the structure of it:

.
└── myscripts/
    ├── images/
    │   ├── readme.txt
    └── generate_png_transparent_demo.py

Explain as follows:

  • The images directory is a target directory that we would put our result image into it
  • The generate_png_transparent_demo.py is the file that do the magic

3.2 The code that cause the problem

def get_font():
    font = ImageFont.truetype("arial.ttf", fontsize)

According to the ImageFont.truetype’s documentation, the first parameter of the function is the font file name, just as follows:

  • font – A truetype font file. Under Windows, if the file is not found in this filename, the loader also looks in Windows fonts/ directory.

When we run the above code, we get this error:

...
    font = ImageFont.truetype("arial.ttf", fontsize)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 852, in truetype
    return freetype(font)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 849, in freetype
    return FreeTypeFont(font, size, index, encoding, layout_engine)
  File "/Users/bswen/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/ImageFont.py", line 210, in __init__
    font, size, index, encoding, layout_engine=layout_engine
OSError: cannot open resource

You can see the program is complaining that it can not find the font file on the system.

3.3 The solution

We should tell python where to load the font file , just as follows:

def get_font(txt, img_fraction=0.05):
    font = ImageFont.truetype("/Library/fonts/Arial.ttf", fontsize)

Re-run the program, no errors again.

3.4 Why?

On windows system, python PIL libraray would find the font file in system font directories, but on MacOS, it seems that the library can not find the font file by itself.

Where is the font file on Mac?According to Mark Setchell and Nathaniel, the files are located at :

/System/Library/Fonts
/Library/Fonts

you can check in both at the same time from Terminal:

$ find {/System,}/Library/Fonts -name *ttf

5. Summary

In this post, we demonstrated how to use solve the system font file problem when using PIL in python, you can see that the PIL is not very compatible with MacOS, there is a trick on this job. Thanks for your reading. Regards.

  1. Recreate OSError: [Errno 8] Exec format error in Linux
  2. Add #!/bin/sh to Fix OSError: [Errno 8] Exec format error in Linux
  3. Use sh to Fix OSError: [Errno 8] Exec format error in Linux

OSError: [Errno 8] Exec Format Error in Python

The subprocess module in Python allows you to run commands by creating new processes. When running a shell script using its methods, sometimes you may get an OSError: [Errno 8] Exec format error in Linux.

The problem Exec format error is raised when the script is directly run and not through the correct interpreter. It occurs if there is no shebang line at the beginning of the script file.

This tutorial will teach you to fix Linux’s OSError: [Errno 8] Exec format error.

Recreate OSError: [Errno 8] Exec format error in Linux

First, let’s recreate OSError: [Errno 8] Exec format error in Linux.

The following is a Bash script myshell.sh that returns Welcome to DelftStack Tutorials.

echo "Welcome to DelftStact Tutorials"

Below is a Python script, myscript.py, that runs the above script using subprocess.Popen().

import subprocess
shell_file = '/home/delft/myshell.sh'
P = subprocess.Popen(shell_file)

Run the Python script in the terminal.

python3 script.py

Output:

Traceback (most recent call last):
  File "myscript.py", line 3, in <module>
    P = subprocess.Popen(shell_file)
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/home/delft/myshell.sh'

As you can see, it returns the error OSError: [Errno 8] Exec format error.

Add #!/bin/sh to Fix OSError: [Errno 8] Exec format error in Linux

The best way to solve this issue is by adding #!/bin/sh at the top of the shell script file myshell.sh. It ensures that the system uses the right interpreter to run the .sh script.

Edit the myshell.sh file with any editor and add the below lines.

#!/bin/sh
echo "Welcome to DelftStack Tutorials"

Now run the Python script to see the result.

python3 myscript.py

Output:

Welcome to DelftStack Tutorials

Use sh to Fix OSError: [Errno 8] Exec format error in Linux

You can also specify sh in Python script in the command that runs the shell script file.

Here is an example of it.

import subprocess
shell_file = '/home/delft/myshell.sh'
P = subprocess.Popen(['sh', shell_file])

Next, run the Python script file.

python3 myscript.py

Output:

Welcome to DelftStack Tutorials

Now you know how to solve OSError: [Errno 8] Exec format error and run shell scripts using Python in Linux. We hope you find this tutorial helpful.

Like this post? Please share to your friends:
  • Origin как изменить дату рождения
  • Origin seems to be running no communication with orange is possible как исправить
  • Org xml sax saxparseexception related to above error the first definition appears here
  • Org postgresql driver error
  • Org openqa selenium webdriverexception unknown error failed to create chrome process