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

添加如下
export PATH=/usr/bin:/usr/local/cuda-8.0/bin:$PATH

source文件后

查看python版本,还是3.5.2,这和想象中的不一样啊

[root@ai-main ~]# echo $PATH
前面怎么多一个python3的环境变量
/opt/anaconda3/bin:$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
是不是用户环境变量中,对python的环境也有配置,于是查看.bashrc文件
[root@ai-main ~]# cat .bashrc
# .bashrc
# User specific aliases and functions
alias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# added by Anaconda3 4.2.0 installer
export PATH=”/opt/anaconda3/bin:$PATH”
发现果然有问题,注释掉后
[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时,运行这个文件。

如果觉得本博客对您有帮助,可以赞助作者哦~

赫墨拉

我是一个喜爱大数据的小菜鸡,这里是我分享我的成长和经历的博客

You may also like...

2 Responses

  1. hello说道:

    你这样无法解决问题、1

发表评论

邮箱地址不会被公开。