Python一个print命令两个变量输出两行到屏幕
我有一个通过Apache访问的PHP脚本,它会调用一个Python脚本来读取两个服务器上的/etc/redhat-release文件,并把结果分别存储在两个不同的变量中。然后我把这两个变量打印到屏幕上。问题是,它们在屏幕上显示在同一行上,结果是这样的:['Red Hat Enterprise Linux Server release 6.5 (Santiago)\n', 'Red Hat Enterprise Linux Server release 6.2 (Santiago)\n']
我试着在它们之间插入一个换行符\n或者"\n",但出现了错误:SyntaxError: invalid syntax
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 个回答
你忘了在 first
和 second
之间加 +
了。要修正你的例子,可以这样做:
`print first + '\n' + second`
或者你可以使用下面的格式字符串:(这是我更喜欢的方式)
first = 'foo'
second = 'bar'
print '%s\n%s' % (first, second)
# foo
# bar
你需要把 \n
放在引号里。它是一个字符串字面量,所以你需要把 first
、"\n"
和 second
这三个部分连在一起,才能形成一个完整的字符串来打印。
print first + "\n" + second
你忘记加+
了(这个是用来把字符串连接起来的),还有'\n'周围的引号(这样才能把它当作字符串使用):
>>> print 'a' + '\n' + 'b'
a
b
不过我更喜欢用format
:
>>> print 'a{}b'.format('\n')
a
b
补充一下:正如@Bob说的,在你使用的旧版Python中,你需要输入
'a{0}b'.format('\n')
第一个代码片段在我用2.6版本时运行得很好。
注意:你现在使用以下命令从标准输出中提取信息:
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有问题。