我有一个可通过Apache访问的php脚本,它在两个服务器上调用python脚本cat / etc / redhat-release并返回结果并将它们分配为两个不同的变量。然后我将两个变量打印到屏幕上。问题是它将它们打印在屏幕上的同一行:['红帽企业Linux服务器版本6.5(圣地亚哥)\ n',红帽企业Linux服务器版本6.2(圣地亚哥) \ n']
我已尝试插入\ n或" \ n"在之间,但我得到一个错误: SyntaxError:语法无效
File "/var/www/html/php/check_version.py", line 35
print first + \n second
^
SyntaxError: unexpected character after line continuation character
如果我在两行打印它们只给我最后一个变量。例如:
print first
print second ( I only get this result on the screen )
我错过了什么?
这是我的剧本:
#!/usr/bin/python
import paramiko, os, string, threading
import getpass
import socket
import sys
firsthost = '192.168.1.4'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(firsthost, username='user', password='password')
stdin, stdout, stderr = ssh.exec_command('cat /etc/redhat-release')
first = stdout.readlines()
secondhost = '192.168.1.5'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(secondhost, username='user', password='password')
stdin, stdout, stderr = ssh.exec_command('cat /etc/redhat-release')
second = stdout.readlines()
print first + second
ssh.close()
答案 0 :(得分:2)
您忘记了+
(连接字符串)和'\ n'周围的引号(使其成为字符串):
>>> print 'a' + '\n' + 'b'
a
b
我更喜欢format
:
>>> print 'a{}b'.format('\n')
a
b
编辑:正如@Bob所说,在旧的Python版本中,您需要发出
'a{0}b'.format('\n')
第一个片段在2.6中对我来说很好。
答案 1 :(得分:2)
注意:您目前正在使用以下命令从stdout中提取信息:
first = stdout.readlines()
second = stdout.readlines()
这将返回一个列表,当您将它们添加到一起时,将打印出一个列表。你不想要那个。你希望它们成为字符串(在过多的换行符上删除它们也是一个好主意),所以你想要做以下事情:
first = stdout.readline().strip()
second = stdout.readline().strip()
从那里你可以将它们回显到带有标签的html来分隔这些行:
print "{0}</br>{1}".format(first,second)
但是,如果您在获取有效输出时遇到问题(正如您在众多评论中所述),您可能希望在php界面之前手动运行脚本以确定它是否正常工作。是否只是打印出变量,如果它不能,那么你的ssh exec_command就会出现问题。
答案 2 :(得分:0)
您需要将\n
放在引号中。它也是一个字符串文字,因此您需要将first
,"\n"
和second
连接在一起,以便打印一个字符串。
print first + "\n" + second
答案 3 :(得分:0)
您忘记了+
和first
之间的second
。要修复您的示例,请执行以下操作:
`print first + '\n' + second`
或者你可以做一个如下所示的格式字符串:(我的偏好)
first = 'foo'
second = 'bar'
print '%s\n%s' % (first, second)
# foo
# bar