簡體   English   中英

如何從 yml 文件執行 python 代碼?

[英]How do I execute python code from yml file?

我決定將我的 python 應用程序配置存儲在 yml 文件中。 我的 yml 文件如下所示:

配置.yml

name: firstApp
base_dir: "Path(__file__).resolve(strict=True).parent.parent"
secret_key: "a passphrase for peppering"
mysql: 
    host: localhost
    user: root
    passwd: "my secret password"

然后我使用 pyyaml 庫導入 yml 文件:

配置文件

import yaml
config = yaml.safe_load(open('path/to/config.yml'))

當前config.base_dir返回Path(__file__).resolve(strict=True).parent.parent但我希望它返回 python 代碼的 output 代碼,該代碼首先依賴於from pathlib import Path運行。

不贊成使用evalexec 但我沒有看到任何其他方式。 尋找一些指導和一種沒有任何安全問題的方法。

謝謝,

根據定義,從外部實體可寫的文本文件中運行代碼是一種潛在的安全隱患。 嘗試和支持此類事情的傳統方法是在“沙箱”(具有有限權限的受限環境)中運行代碼,但這並不是微不足道的(請參閱此處的一些基本細節和Software Engineering Stack Exchange 中的更完整答案) - 除非您可以非常准確地定義代碼應該和不應該做什么的權限,否則這將是一個令人頭疼的配置,這將是非常特定於操作系統的。

當我需要與您提供的類似配置時,通常我會定義諸如{current_file_path}和其他魔術值之類的令牌,並在它們出現在字符串中時對其進行解釋-在您的情況下,它將是{current_file_path}/../..這將獲得與建議的代碼相同的結果(假設您確實解析了路徑)。

如果您可以定義您希望支持的功能列表,它可能會為您的用例提供更安全的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM