首页 > 解决方案 > Python subshel​​l 和 Linux shell 如何产生不同的结果?

问题描述

我有一个包含.pp Puppet 清单文件的子文件夹的文件夹。我发现我可以使用puppet strings工具将.pp文件转换为 json。

这可以使用 Unix 终端运行命令轻松实现puppet strings generate --format json file_name.pp

我编写了一个简单的 python 脚本来遍历特定目录及其子目录中的所有文件,并对每个文件运行此命令。

可悲的是,在运行脚本时,我得到的只是空的木偶字符串模板,没有任何内容(我实现了打印出调用的命令),但是在 Unix 终端中使用这些命令非常好。

请问,命令在 Unix shell 中运行但在 Python 的子 shell 中运行,我做错了什么?

这是代码:

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()

标签: pythonlinuxcommandpuppetsubshell

解决方案


我找到了答案 - 将最后一个函数行更改为os.system('puppet strings generate --format json ' + os.path.join(dirpath, filename))完美工作,因为我忘记了脚本在对其中的子目录和文件进行操作时不会更改当前目录。


推荐阅读