运行 Python 中带有子进程的顺序命令
Run sequential commands in Python with subprocess
希望对您有所帮助。在我的 Python 脚本中,我需要 运行 具有特定图像(在我的例子中是 Fenics)的软件容器 Docker,然后向他传递一个命令来执行脚本。
我试过子进程:
cmd1 = 'docker exec -ti -u fenics name_of_my_container /bin/bash -l'
cmd2 = 'python2 shared/script_to_be_executed.py'
process = subprocess.Popen(shlex.split(cmd1),
stdout=subprocess.PIPE,stdin=subprocess.PIPE, stderr =
subprocess.PIPE)
process.stdin.write(cmd2)
print(first_process.stdout.read())
但它什么也没做。建议?
在您的调用中删除 -it
标志 do docker
,您不需要它们。另外,不要尝试通过 stdin 将要执行的命令发送到容器中,而只是在调用 do docker exec
.
时将命令传递给 运行
我没有容器 运行ning,所以我将使用 docker run
,但下面的代码应该会给你一个线索:
import subprocess
cmd = 'docker run python:3.6.4-jessie python -c print("hello")'.split()
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)
这将在容器中 运行 python -c print("hello")
并捕获输出,因此 Python (3.6) 脚本本身将打印
b'hello\n'
它也适用于 Python 2.7,我不知道你在主机上使用的是哪个版本:)
关于与子进程通信,请参阅官方文档subprocess.Popen.communicate. Since Python 3.5 there's also subprocess.run,这会让您的生活更轻松。
HTH!
您可以使用子进程将 Fenics 作为应用程序调用,第 4.4 节here。
docker run --rm -v $(pwd):/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python3 my-code.py"
希望对您有所帮助。在我的 Python 脚本中,我需要 运行 具有特定图像(在我的例子中是 Fenics)的软件容器 Docker,然后向他传递一个命令来执行脚本。
我试过子进程:
cmd1 = 'docker exec -ti -u fenics name_of_my_container /bin/bash -l'
cmd2 = 'python2 shared/script_to_be_executed.py'
process = subprocess.Popen(shlex.split(cmd1),
stdout=subprocess.PIPE,stdin=subprocess.PIPE, stderr =
subprocess.PIPE)
process.stdin.write(cmd2)
print(first_process.stdout.read())
但它什么也没做。建议?
在您的调用中删除 -it
标志 do docker
,您不需要它们。另外,不要尝试通过 stdin 将要执行的命令发送到容器中,而只是在调用 do docker exec
.
我没有容器 运行ning,所以我将使用 docker run
,但下面的代码应该会给你一个线索:
import subprocess
cmd = 'docker run python:3.6.4-jessie python -c print("hello")'.split()
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)
这将在容器中 运行 python -c print("hello")
并捕获输出,因此 Python (3.6) 脚本本身将打印
b'hello\n'
它也适用于 Python 2.7,我不知道你在主机上使用的是哪个版本:)
关于与子进程通信,请参阅官方文档subprocess.Popen.communicate. Since Python 3.5 there's also subprocess.run,这会让您的生活更轻松。
HTH!
您可以使用子进程将 Fenics 作为应用程序调用,第 4.4 节here。
docker run --rm -v $(pwd):/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python3 my-code.py"