Как Python subshell и Linux shell дают разные результаты? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть папка с подпапками, содержащая .pp Файлы манифеста Puppet. Я обнаружил, что могу использовать инструмент puppet strings для преобразования .pp файлов в json.

Этого легко достичь, используя терминал Unix, запустив команду puppet strings generate --format json file_name.pp.

Я написал простой сценарий python для перебора всех файлов в указанном каталоге c и его подкаталоги, и запускайте эту команду для каждого файла.

К сожалению, я получаю только пустой шаблон строки марионеток без содержимого при запуске сценария (я реализовал распечатку команд, которые называется), однако использование команд прекрасно работает внутри Unix терминала.

Пожалуйста, что я делаю неправильно, что команды работают в Unix оболочке, но не внутри Python в подоболочке?

Вот код:

import os


def generate_json():
    for dirpath, dirnames, filenames in os.walk(
            '/home/odolezal/PycharmProjects/puppet_parser/files/'):
        for filename in [f for f in filenames if f.endswith(".pp")]:
            print(os.path.join(dirpath, filename))
            print('puppet strings generate --format json ' + filename)
            os.system('puppet strings generate --format json ' + str(filename))

if __name__ == "__main__":
    generate_json()

1 Ответ

0 голосов
/ 03 марта 2020

Я нашел ответ - изменение последней строки функции на os.system('puppet strings generate --format json ' + os.path.join(dirpath, filename)) работает отлично, поскольку я забыл, что скрипт не меняет текущий каталог при работе с подкаталогами и файлами внутри них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...