Python subshell 和 Linux shell 如何产生不同的结果?

How do Python subshell and Linux shell produce different results?

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

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

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

遗憾的是,puppet strings 模板在 运行 脚本时没有任何内容,(我实现了打印出调用的命令),然而,使用这些命令在 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()

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