2016-11-27 47 views
0

泊坞窗脚本构建一个TF图像分类,我在我运行下面的命令泊坞窗图像是bash shell:正确自动化基于<a href="https://www.youtube.com/watch?v=QfNvhPx5Px8" rel="nofollow noreferrer">this tutorial</a>在Python

docker run --name fooldocker -it -v $HOME/tf_files:/tf_files/ gcr.io/tensorflow/tensorflow:latest-devel 

然后在这个码头工人形象我运行我的Python脚本:

python /tf_files/label_image.py /tf_files/myimages 
exit 

它的工作原理。

但现在,我需要在Python脚本中自动执行这些命令。我想:

p = Popen(['docker', 'run', '--rm', '--name', 'fooldocker','-it', '-v', '$HOME/tf_files:/tf_files/', 'gcr.io/tensorflow/tensorflow:latest-devel'], stdout=PIPE) 
p = Popen(['docker', 'exec', 'fooldocker', 'python', '/tf_files/label_NES.py', '/tf_files/NES/WIP']) 
p = Popen(['docker', 'kill', 'fooldocker'], shell=True, stdout=PIPE, stderr=PIPE) 
p = Popen(['docker', 'rm', 'fooldocker'], shell=True, stdout=PIPE, stderr=PIPE) 

导致这种错误POPEN#2运行后:

docker: Error response from daemon: create $HOME/tf_files: "$HOME/tf_files" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. 

回答

1

的问题是,$HOME不能在这个单引号的字符串进行评估。要么尝试双引号,要么事先评估变量并将其放入命令字符串中。

另外:如果设置SHELL = True时,不要将您的指令分割成一个列表:

p = Popen('docker kill fooldocker', shell=True, stdout=PIPE, stderr=PIPE) 
0

那是因为POPEN没有解释$HOME到您家路径。 ,它是字符串$HOME并传递给docker命令,该卷命令不允许$存在于卷名中。

也许你可以使用subprocess模块为方便起见,例如:

import subprocess 
subprocess.call("echo $HOME", shell=True) 

它解释$HOME如果指定shell=True

+0

Popen是子流程模块的一部分;) –

+0

哦,是的,我忘了它也属于'subprocess'。 经常使用包装函数:| – CSJ

相关问题