Каталог длинных списков Python (ls -l), ls *

1

Я пытаюсь использовать ls -l из python, чтобы проверить дату последнего изменения файла.

os.listdir не отображает формат длинного списка. subprocess.call показывает формат, но на самом деле печатает его и возвращает 0. Я хочу, чтобы его можно было поместить в переменную. Есть идеи?

Кроме того, я попробовал

subprocess.call("ls","*.py")

который отвечает

ls: cannot access *.py: No such file or directory

он работает с shell=True, но если кто-то может объяснить, почему он не работает без него, я буду признателен. Если вы знаете, как заставить его работать, еще лучше.

  • 8
    Почему в мире вы предпочитаете делать это, а не просто использовать os.path.getmtime() ?
Теги:

1 ответ

2
Лучший ответ

Он не работает без shell=True потому что * является символом расширения оболочки - от *.py до списка файлов, заканчивающихся на .py - это функция, выполняемая самой оболочкой, а не ls или python.

Если вы хотите получить результат команды, вызванной через subprocess, вы должны использовать subprocess.check_output() или subprocess.Popen.

ls_output = subprocess.check_output(['ls', '-l'])
  • 3
    Конечно, еще лучше не вызывать ls , а вместо этого использовать os.listdir() и os.stat() (или служебные функции в os.path и модуле glob .)
  • 1
    Я согласен. Но так как вопрос был конкретно о подпроцессе, я полагаю, что по крайней мере должен ответить на него для всех, кто сталкивается с вопросом.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню