[英]How do I execute python code from yml file?
我決定將我的 python 應用程序配置存儲在 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
運行。
不贊成使用eval
和exec
。 但我沒有看到任何其他方式。 尋找一些指導和一種沒有任何安全問題的方法。
謝謝,
根據定義,從外部實體可寫的文本文件中運行代碼是一種潛在的安全隱患。 嘗試和支持此類事情的傳統方法是在“沙箱”(具有有限權限的受限環境)中運行代碼,但這並不是微不足道的(請參閱此處的一些基本細節和Software Engineering Stack Exchange 中的更完整答案) - 除非您可以非常准確地定義代碼應該和不應該做什么的權限,否則這將是一個令人頭疼的配置,這將是非常特定於操作系統的。
當我需要與您提供的類似配置時,通常我會定義諸如{current_file_path}
和其他魔術值之類的令牌,並在它們出現在字符串中時對其進行解釋-在您的情況下,它將是{current_file_path}/../..
這將獲得與建議的代碼相同的結果(假設您確實解析了路徑)。
如果您可以定義您希望支持的功能列表,它可能會為您的用例提供更安全的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.