在 Python 子进程模块中获取“docker ps”不接受任何参数错误

问题描述 投票:0回答:1

我想在 Flask Web 服务器中使用 Python Subprocess 模块获取命令的输出

docker ps -a --format '{{json .}}'

但是我收到以下错误

"docker ps" accepts no arguments


适用于

docker ps -a

 命令,但使用 
docker ps -a --format '{{json .}}'
 命令
失败

这是代码

@app.route('/get_docker_container_details', methods=['GET']) def get_docker_container_details(): command = "docker ps -a --format '{{json .}}'" cmd = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = cmd.communicate() logger.info(output) logger.info(error) return Response()
这是日志

INFO:automater_agent:b'' INFO:automater_agent:b'"docker ps" accepts no arguments.\nSee \'docker ps --help\'.\n\nUsage: docker ps [OPTIONS]\n\nList containers\n' INFO:werkzeug:172.23.100.228 - - [08/Jan/2024 12:09:51] "GET /get_docker_container_details HTTP/1.1" 200 -
终端中的命令运行正常。但我在 Flask 服务器中遇到错误

那么如何解决呢?

谢谢。

python python-3.x docker flask subprocess
1个回答
0
投票
应该是

command = ['docker', 'ps', '-a', '--format', "'{{json .}}'"] cmd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
如果我们拆分列表,列表将变为 

['docker', 'ps', '-a', '--format', "'{{json", ".}}'"]

,这使得 '.}}' 成为位置参数。并且 docker ps 不接受位置参数。

谢谢@KlausD。和@zvone

© www.soinside.com 2019 - 2024. All rights reserved.