Linux (Manjaro )вывод типа QML из файла.py

Я настроил в BIOS параметры двойной загрузки (в моем случае Поддержка устаревшего режима загрузки ). Из GRUB введите «выход» и выберите диспетчер загрузки Ubuntu в меню параметров загрузки на следующем экране. Мне удалось успешно загрузить Ubuntu.

2
27.04.2020, 01:50
1 ответ

In general, Linux assumes all files ending with.py are python scripts

Linux как ядро ​​на самом деле не заботятся об окончании файлов. Это только проверяет, начинается ли файл с шебанг или немного магии например, 0x7F, за которым следует ELF (45 4c 46 )для ЭЛЬФ .

Я могу воспроизвести эту проблему с помощью 1.8.14 (Xfce 4.12)в Slackware 64. -ток. Thunar не определяет типы файлов сам по себе, а использует База данных MIME , которая другая программы также используют:

$ grep mime /proc/$(ps -C thunar -o pid:1=)/maps
7f2c3a709000-7f2c3a730000 r--s 00000000 08:01 1055508                    /usr/share/mime/mime.cache

Вы можете использовать xdg-mime query filetypeили программу Perl под названием mimetypeиз perl-file-mimeinfoдля проверки типа MIME для данного файл:

$ mimetype test.py
test.py: text/x-qml

И используйте -Dс mimetype, чтобы проверить, почему был выбран данный тип MIME:

$ mimetype -D test.py
> Data dirs are: /home/ja/.local/share, /usr/local/share, /usr/share
> Checking inode type
> Value "import Qt" at offset 3044 matches at /usr/share/mime/magic line 120
>> Value "{" at offset 3065 matches at /usr/share/mime/magic line 121
test.py: text/x-qml

Как видите, в данном случае mimetypeговорит, что test.py — это text/x-qmlпотому что он содержит фигурные скобкиimport Qtи . Если бы test.py посмотрел вот так:

#!/usr/bin/env python3

from PyQt5 import QtWidgets

mimetypeсообщает, что это скрипт Python, потому что, хотя он может найти import Qtнет фигурных скобок:

$ mimetype -D test.py
> Data dirs are: /home/ja/.local/share, /usr/local/share, /usr/share
> Checking inode type
> Value "import Qt" at offset 3044 matches at /usr/share/mime/magic line 120
> Failed nested rules
> Checking globs for basename 'test.py'
> Checking for extension '.py'
test.py: text/x-python

Что смешного, если test.pyпереименовать в test.pl, то mimetypeутверждает, что это сценарий Perl.

OTOH, fileговорит, что это скрипт Python, даже после его переименования:

$ file test.pl
test.py: Python script, ASCII text executable

См. этот ответ, чтобы узнать о расхождениях между командами mimetypeиfile:'file --mime -type' и 'mimetype', возвращающими разные результаты .

1
19.03.2021, 02:25

Теги

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