【发布时间】:2015-03-17 13:00:28
【问题描述】:
您好,我有一个嵌入了 perl 脚本的 shell 脚本。
cat chkLog.sh
LOGFILE=`echo $1`
echo "#Action15: Check Log" | tee -ia $LOGFILE
perl << '__THERE__' | tee -ia $LOGFILE
print("hello Word\n");
.Some more complex perl codes
.
.
__THERE__
echo "#EndAct" | tee -ia $LOGFILE
基本上我使用 Here-docs 概念来执行 perl 代码。现在,如果我直接在服务器上执行上述脚本,我会得到所需的输出。但是当我通过 paramiko 发送它时,perl 部分被完全忽略了。输出是:
通过 Paramiko 输出:
#Action15: Check Log
#EndAct"
Paramiko 脚本:
>>> hostname='192.168.122.1'
>>> username='may'
>>> password='*******'
>>> setupcommand="/user/may/click_demo_test/chkLog.sh"
>>> resultloc="/user/spm/click_demo_test/setuplog/chkLog.sh"
>>> execomand= setupcommand + ' ' + resultloc
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect(hostname,username=username,password=password)
>>> channel = ssh.get_transport().open_session()
>>> channel.exec_command(execomand)
>>> while not channel.exit_status_ready():
time.sleep(1)
>>> stdout = channel.makefile("rb")
>>> print stdout.readlines()
将 Perl 转换为完整的 shell 将是一项繁重的任务,因为我有很多脚本。
【问题讨论】: