python - 调用模块时如何将 XML 片段作为参数传递?
问题描述
我是 Python 新手,正在尝试使用 FastAPI 设置一个小微服务示例。
微服务设置使用配置 XML 进行配置:
<?xml version="1.0" encoding="utf-8"?>
<config>
<service name="Watch folder">
<module name="folder_watcher">
<port>8001</port>
<folder>folder/to/watch</folder>
<interval>5s</interval>
</module>
</service>
</config>
主模块如下所示(仍在进行中):
import defusedxml.ElementTree
import subprocess
import pathlib
import os
SERVICE_DIR = 'service'
def launchService(service):
print('Service: ' + service.attrib['name'])
for module in service.findall('./module'):
module_name = module.attrib['name']
print('* Module: ' + module_name)
parameters = module.findall('./*')
for parameter in parameters:
print(' * ' + parameter.tag + ': ' + parameter.text)
folder_path = pathlib.Path(__file__).parent.resolve()
command = os.path.join('python ', folder_path, SERVICE_DIR, module_name, 'main.py')
print('* Command: ' + command)
subprocess.Popen(command, parameters)
def loadConfig():
# config.xml
elementTree = defusedxml.ElementTree.parse('config.xml')
for service in elementTree.findall('./service'):
launchService(service)
if __name__ == "__main__":
loadConfig()
folder_watcher 模块的 main.py 读取
import sys
from fastapi import FastAPI
import uvicorn
service = FastAPI()
@service.get("/")
async def root():
return {"Message": "Hello World!"}
if __name__ == "__main__":
parameters = sys.argv[1]
for parameter in parameters:
print(' * ' + parameter.tag + ': ' + parameter.text)
uvicorn.run(service, host="localhost", port=8000)
在编码过程中出现了几个问题:
subprocess.Popen
调用微服务的正确方法是什么?- 如何提供用于配置服务的 XML 片段作为参数?
- 还有其他事情,我可能已经监督了吗?
提前澄清几点:示例必须使用 FastAPI 实现,我不能使用 Docker / 它必须实现“独立的纯 Python”,并且必须使用 XML 而不是 JSON 或其他结构化文本格式。
如果这对我的问题来说是错误的地方,请不要犹豫,指出我正确的方向/正确的董事会。
解决方案
推荐阅读
- google-cloud-platform - GCP 中的问候问题 apigee 配置
- java - 导航离开片段后调用 onCreate 和 onDestroy
- jenkins - SonarQube 将各种应用程序的分析报告组合在一个报告中
- text - 使用 nodeMCu ESP8266 写入 SD 卡
- c++ - boost::program_options::options_description 不适用于简化的命令名称
- javascript - 油门函数返回(...args),返回函数(...args)
- nginx - 重定向 https (TOMCAT-NGINX) 后 Nginx 不发出 POST 请求
- ruby-on-rails - 如何将csv文件复选框值导出到ruby on rails的表中?
- spring-security - 如何在同一个应用程序中配置 OAuth2ResourceServer 和 OAuth2Client?
- ios - 删除谷歌地图中的自定义信息窗口后如何取消选择 GMSMarker