Python一个print命令两个变量输出两行到屏幕

1 投票
4 回答
1010 浏览
提问于 2025-04-18 13:00

我有一个通过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 个回答

0

你忘了在 firstsecond 之间加 + 了。要修正你的例子,可以这样做:

`print first + '\n' + second`

或者你可以使用下面的格式字符串:(这是我更喜欢的方式)

first = 'foo'
second = 'bar'
print '%s\n%s' % (first, second)

# foo
# bar
0

你需要把 \n 放在引号里。它是一个字符串字面量,所以你需要把 first"\n"second 这三个部分连在一起,才能形成一个完整的字符串来打印。

print first + "\n" + second
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版本时运行得很好。

2

注意:你现在使用以下命令从标准输出中提取信息:

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有问题。

撰写回答