获取“docker ps”在Python Subprocess模块中不接受参数错误

nnsrf1az  于 4个月前  发布在  Python
关注(0)|答案(1)|浏览(81)

我想使用Flask Web服务器中的Python子进程模块获取命令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服务器中出现错误
那么如何解决呢?
谢谢.

4ngedf3f

4ngedf3f1#

应当

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

相关问题