2016-11-27 105 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

相關問題