Python一个打印命令两个变量输出两个不同的行到屏幕

时间:2014-07-11 19:50:04

标签: php python linux newline python-2.6

我有一个可通过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()

4 个答案:

答案 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