我想在厨师中使用python解释器.以下是我天真的尝试,但没有奏效.在python中完成下面的正确方法是什么?
script "install_something" do
interpreter "python"
user "root"
cwd "/tmp"
code <<-EOH
import boto
f = open('test.txt','r')
f.write('adfadf')
f.close()
EOH
not_if {File.exists?("/tmp/test.txt")}
end
[Mon, 02 Apr 2012 15:20:35 +0000] ERROR: Chef::Exceptions::ShellCommandFailed: script[install_something] (rtb_server::default line 101) had an error: Chef::Exceptions::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "python" "/tmp/chef-script20120402-26069-3d6hob-0" ----
STDOUT:
STDERR: File "/tmp/chef-script20120402-26069-3d6hob-0", line 1
import boto
^
IndentationError: unexpected indent
---- End output of "python" "/tmp/chef-script20120402-26069-3d6hob-0" ----
Ran "python" "/tmp/chef-script20120402-26069-3d6hob-0" returned 1
Run Code Online (Sandbox Code Playgroud)
的内容
code <<-EOH
import boto
f = open('test.txt','r')
f.write('adfadf')
f.close()
EOH
Run Code Online (Sandbox Code Playgroud)
被逐字传递给口译员,也就是说包括领先的缩进词.因为缩进形成了python语法的一部分,所以你的脚本(在<<-EOH/ 之间EOH)不是有效的python.
在这种情况下的解决方案是删除<<-EOH/ EOH块内的缩进.