Python lstat дает другое значение, чем системная статистика

Я пытаюсь найти права доступа к файлу на моем компьютере с Windows. В зависимости от того, использую ли я способ Python, я всегда получаю 666 для всех файлов, которые я тестировал. Если я использую системную команду stat -c %a, я получаю другой ответ.

Я также пробовал

$ stat -c %a dummy.txt
644
>>> import os
>>> print(oct(os.lstat("dummy.txt").st_mode))
0o100666
>>> import os
>>> os.access("dummy.txt", os.X_OK) 
True

Я ожидал, что ответ будет 0o100644, а доступ к выполнению будет False. Кто-нибудь знает, почему я получаю эти проблемы?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
151
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я уверен, что внутри модуля os есть много функций на основе файлов. Если вы запустите os.stat(имя файла), вы всегда сможете интерпретировать результаты.

http://docs.python.org/library/stat.html

$ touch dummy.txt
$ stat -c %a dummy.txt
644

os.stat возвращает 644

In [1]: import os                                                                                                                                                                             

In [2]: from stat import *                                                                                                                                                                    

In [3]: oct(os.stat("dummy.txt")[ST_MODE])                                                                                                                                                    
Out[3]: '0o100644'

другой способ получить разрешения:

from os import popen                                                                                                                                                                  

cmd = "stat -c '%A %a %n' *"                                                                                                                                                          

fname = "dummy.txt" 
for i in popen(cmd): 
    p, m, n = i.split() 
    if n != fname: 
        continue 
    print(m) 
    break 

выход

644

Другие вопросы по теме

Почему есть отчет AttributeError для класса символов и animation_dir, хотя он четко определен?
Можно ли получить доступ к записи текстового поля из одного класса (и добавить к ней) из другого класса? В этом случае это будет со страницы 2
Как рассчитать расстояние между двумя распределениями двугранных (периодических) углов в питоне?
Convert_to_generator_like num_samples Ошибка атрибута: объект «int» не имеет атрибута «форма»
Вложенные вызовы функций всегда вместе
Как вернуть первое неповторяющееся письмо вне зависимости от случая?
Проблема с изменением текста виджета Kivy TextInput с использованием идентификатора: возникает ошибка «AttributeError: объект «super» не имеет атрибута «__getattr__»
Почему этот код Jupyter не может работать в Python?
Flask - невозможно использовать валидаторы в подформах
Как применить много операций в разных столбцах в искровом фрейме данных и сохранить их с новым псевдонимом

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

Как использовать конвертер Spacy, чтобы сохранить информацию о абзацах из файлов conllu?
Как вы динамически загружаете tf.data.Dataset в режиме активного выполнения, где initializable_iterator недоступен?
Как правильно смоделировать LSTM в Tensorflow и Keras
Скопировать вставить файлы из разных каталогов в одну папку
Почему есть отчет AttributeError для класса символов и animation_dir, хотя он четко определен?
Удалось найти самое большое произведение для Project Euler #8, но каковы числа, которые привели к этому самому большому произведению?
Можно ли получить доступ к записи текстового поля из одного класса (и добавить к ней) из другого класса? В этом случае это будет со страницы 2
Правильно ли сказать, что функция установки свойства в python похожа на перегрузку оператора присваивания?
Почему http-запрос Python создает соединения TIME_WAIT?
Как получить git diff, чтобы я мог использовать его для повышения моей версии с помощью semver? (учебник ThreeDotLabs)