我的Docker命令是:
docker run --rm wappalyzer/cli https://wappalyzer.com
当我运行我的python脚本时:
#!/usr/bin/python
from subprocess import call
import json
import os
import docker
docker run --rm wappalyzer/cli "MYURL"
它说
File "t.py", line 7
docker run --rm wappalyzer/cli "MYURL"
^
SyntaxError: invalid syntax
我的操作系统是ubuntu 14.04,我使用的是ubuntu终端。
答案 0 :(得分:7)
这不是有效的Python代码。如果您只是想运行一个容器并将命令作为参数传递,您可以这样做:
#!/usr/bin/env python
import sys
import docker
image = "wappalyzer/cli"
client = docker.from_env()
client.containers.run(image, sys.argv[1], True)
但是你应该阅读更多关于Python和从Python运行进程的内容,如果这就是你所追求的。 Python不是一种shell语言,你不能只使用内联的shell命令。
答案 1 :(得分:3)
正如@AndyShinn所说,Python不是一种shell语言,但你可以像运行shell命令一样调用docker:
#!/usr/bin/python
import subprocess
with open("/tmp/output.log", "a") as output:
subprocess.call("docker run --rm wappalyzer/cli https://wappalyzer.com", shell=True, stdout=output, stderr=output)
使用这种方法,您不需要导入docker。
答案 2 :(得分:1)
您可以使用名为 docker
的 pip 包并使用它连接到 Docker。
在 subProcess 中运行命令与此解决方案之间的区别在于格式。您可以管理您的映像、容器以及 CLI 的所有功能。
在这里查看:https://docker-py.readthedocs.io/en/stable/
示例:
import docker
client = docker.from_env()
client.containers.run("ubuntu", "echo hello world")
# or
client.containers.run("bfirsh/reticulate-splines", detach=True)
# you can even stream your output like this:
for line in container.logs(stream=True):
print(line.strip())
所有代码示例都可以在我提到的源 URL 中找到。
答案 3 :(得分:-1)
更新:2022-03-22
我们现在有 python-on-whales Python 的 Docker 客户端。适用于 Linux、macOS 和 Windows,适用于 Python 3.7 及更高版本。
URS00000000M3 65
URS0000000001 95