Ambari-agent安装异常:SyntaxError: Missing parentheses in call to ‘print’
添加ambar新节点,安装ambari-agent,并进行校验时,发生了ambari python脚本执行异常
错误如下:
========================== Running setup agent script... ========================== Command start time 2017-09-26 14:30:05 File "/var/lib/ambari-agent/tmp/setupAgent1506407405.py", line 183 print log ^ SyntaxError: Missing parentheses in call to 'print' Connection to ai-main closed. SSH command execution finished host=ai-main, exitcode=1 Command end time 2017-09-26 14:30:05 ERROR: Bootstrap of host ai-main fails because previous action finished with non-zero exit code (1) ERROR MESSAGE: Connection to ai-main closed. STDOUT: File "/var/lib/ambari-agent/tmp/setupAgent1506407405.py", line 183 print log ^ SyntaxError: Missing parentheses in call to 'print'
SyntaxError: Missing parentheses in call to ‘print’
发现是因为python2.X版本与python3.X版本输出方式不同造成的
在python3.X的,输入内容时都要带上括号print(),而在2.X中直接输出就没有问题
服务器上安装了两个python版本,2.x和3.x,默认启动版本为python3.x
查看python版本 root@ai-main ~]# python -V Python 3.5.2 :: Anaconda 4.2.0 (64-bit) 默认是3.5.2的版本
需要将默认的python3.x,改为Python2.x
在网上试了几种办法,都是临时修改python版本,不好用, 突然想起,在系统的环境变量中,对python有配置
修改/etc/profile
source文件后
查看python版本,还是3.5.2,这和想象中的不一样啊
[root@ai-main ~]# echo $PATH #这下正常了 /usr/bin:/usr/local/cuda-8.0/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/jdk1.8/bin:/opt/zeppelin-0.7.2/bin:/root/bin [root@ai-main ~]# python #python的默认版本也是2.X Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
返回ambari安装界面, 重新安装校验,安装成功,问题解决。
搞了一下环境变量,发现自己对/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc的区别不是特别清楚,于是查阅资料,学习了一下。
/etc/profile: 用来设置系统环境参数,设置的环境变量对系统内所有用户生效。比如,当用户第一次登录时,为用户设置环境信息,该文件被执行。
~/.bash_profile: 用来设置一些环境变量,功能和/etc/profile 类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效。
~/.bashrc: 作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效。
另外/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的,意思是只有用户登录时才会生效。
~/.bashrc 是交互式 non-login 方式进入 bash 运行的,用户不一定登录,只要以该用户身份运行命令行就会读取该文件。
/etc/bashrc: 这个文件设置系统bash shell相关的东西,对系统内所有用户生效。当用户shell执行了bash时,运行这个文件。
你这样无法解决问题、1
三年前的文章了,不能适用于现在