python 将文件从主机复制到容器的子进程
python subprocess to copy files from host to container
在 python 子进程中需要帮助以将文件从主机复制到容器
这是我试过的python代码
import subprocess
output=subprocess.check_output(['docker','ps'],
universal_newlines=True)
x=output.split('\n')
for i in x:
if i.__contains__("name_of_container"):
container_id=i[:12]
subprocess.call(["docker cp", "some_file.py", container_id:"/tmp"])
subprocess.call(['docker','exec','-it', container_id,'bash'])
这应该有效:
import subprocess
output=subprocess.check_output(['docker','ps'],
universal_newlines=True)
x=output.split('\n')
for i in x:
if i.__contains__("inspiring_sinoussi"):
container_id=i[:12]
container_id_with_path=container_id+":/tmp"
subprocess.call(["docker", "cp", "/root/some_file.py", container_id_with_path])
subprocess.call(['docker','exec','-it', container_id,'bash'])
实际上在 subprocess
调用中所有参数都用逗号分隔。在您的情况下 container_id:/tmp
应该是一个参数,因为它们之间没有任何 space 。由于 container_id 在您的情况下是一个变量,因此不能将其与 :/tmp
放在一起。所以我创建了一个新变量 container_id_with_path
,其中包含 :/tmp
路径。
运行 脚本给了我想要的结果。
$ python copy.py
/ # ls /tmp/
hsperfdata_root tomcat-docbase.1849924566121837123.9090
some_file.py
您的代码存在一些错误:
container_id:"/tmp"
不是有效的 python 语法
docker cp
不是子进程中的有效命令
docker cp
不在 for 循环中
所以,我想接下来是您的解决方法:
for i in x:
if i.__contains__("name_of_container"):
container_id = i[:12]
subprocess.call(["docker", "cp", "some_file.py", container_id + ":/tmp"])
在 python 子进程中需要帮助以将文件从主机复制到容器 这是我试过的python代码
import subprocess output=subprocess.check_output(['docker','ps'], universal_newlines=True) x=output.split('\n') for i in x: if i.__contains__("name_of_container"): container_id=i[:12] subprocess.call(["docker cp", "some_file.py", container_id:"/tmp"]) subprocess.call(['docker','exec','-it', container_id,'bash'])
这应该有效:
import subprocess
output=subprocess.check_output(['docker','ps'],
universal_newlines=True)
x=output.split('\n')
for i in x:
if i.__contains__("inspiring_sinoussi"):
container_id=i[:12]
container_id_with_path=container_id+":/tmp"
subprocess.call(["docker", "cp", "/root/some_file.py", container_id_with_path])
subprocess.call(['docker','exec','-it', container_id,'bash'])
实际上在 subprocess
调用中所有参数都用逗号分隔。在您的情况下 container_id:/tmp
应该是一个参数,因为它们之间没有任何 space 。由于 container_id 在您的情况下是一个变量,因此不能将其与 :/tmp
放在一起。所以我创建了一个新变量 container_id_with_path
,其中包含 :/tmp
路径。
运行 脚本给了我想要的结果。
$ python copy.py
/ # ls /tmp/
hsperfdata_root tomcat-docbase.1849924566121837123.9090
some_file.py
您的代码存在一些错误:
container_id:"/tmp"
不是有效的 python 语法docker cp
不是子进程中的有效命令docker cp
不在 for 循环中
所以,我想接下来是您的解决方法:
for i in x:
if i.__contains__("name_of_container"):
container_id = i[:12]
subprocess.call(["docker", "cp", "some_file.py", container_id + ":/tmp"])