python - Python subshell 和 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()
解决方案
我找到了答案 - 将最后一个函数行更改为os.system('puppet strings generate --format json ' + os.path.join(dirpath, filename))
完美工作,因为我忘记了脚本在对其中的子目录和文件进行操作时不会更改当前目录。
推荐阅读
- amazon-web-services - 如何在不单独写出每个帐户的情况下将此报表用于我的组织中的帐户?
- oauth-2.0 - Keycloak 反向通道注销 URL 机制未按预期工作
- swift - Swift Combine:等到订阅生成值
- networking - 在同一个 vmnet 上的两台机器之间没有路由到主机
- python - 没有这样的文件或目录:'data_volume/finetuned_BERT_epoch_1.model?
- r - 计算集群稳健方差矩阵
- php - 将 www 更改为子域,CodeIgniter 函数仍在发送到 www,得到 302 移动错误
- http - 如何正确使用directus /auth/refresh?
- devops - OpenWhisk 身份验证问题(获取用户名和密码)
- node.js - 在生产中使用 mongoDB 和 heroku