Python:将元组转换为字符串

Python:将元组转换为字符串,python,string,tuples,Python,String,Tuples,鉴于此: import os import subprocess def check_server(): cl = subprocess.Popen(["nmap","10.7.1.71"], stdout=subprocess.PIPE) result = cl.communicate() print result check_server() check_server()返回此元组: ('\nStarting Nmap 4.53 ( http://insecu

鉴于此:

import os
import subprocess

def check_server():

    cl = subprocess.Popen(["nmap","10.7.1.71"], stdout=subprocess.PIPE)
    result = cl.communicate()
    print result

check_server()
check_server()返回此元组:

('\nStarting Nmap 4.53 ( http://insecure.org ) at 2010-04-07 07:26 EDT\nInteresting ports on 10.7.1.71:\nNot shown: 1711 closed ports\nPORT   STATE SERVICE\n21/tcp open  ftp\n22/tcp open  ssh\n80/tcp open  http\n\nNmap done: 1 IP address (1 host up) scanned in 0.293 seconds\n', None)
将方法中的第二行更改为

result, err = cl.communicate()
导致check_server()返回:

Starting Nmap 4.53 ( http://insecure.org ) at 2010-04-07 07:27 EDT
Interesting ports on 10.7.1.71:
Not shown: 1711 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.319 seconds
看起来是这样的:元组被转换为字符串,并且\n被剥离。。。。但是怎么做呢

cl.communicate()
仍在返回元组。赋值
result,err=…
的作用是将元组解压到变量
result
(字符串)和
err
(整数)中


打印元组时,它使用每个元素的
repr(…)
,但打印字符串时,它只打印字符串,因此没有分隔符和
\n
s。

print
很聪明。如果你给它传递一个字符串,它就会打印出来。如果您将其他内容(本例中为元组)传递给它,则它将打印其表示形式(由
repr()
返回)

字符串的表示形式具有
\n
,其中字符串包含换行符。表示法的周围也有引号


尝试将您的
print
语句更改为
print repr(result)
,您将看到。

在这两种情况下
cl.communicate()
返回一个两元素元组(如果stdout和stderr都重定向到管道,则返回命令的stdout和stderr)。在第一种情况下,您将此元组分配给
结果
变量。当您打印它时,您会得到元组的文本表示。在这种表示法中,特殊字符(如行尾)被转义(到“\n”)


在第二种情况下,您将解包元组。这意味着:将元组的第一个元素分配给
result
,第二个元素分配给
err
。由于
结果
已经是一个字符串,因此打印时不会转义–行尾字符显示为换行符,而不是“\n”。

打印
不会使用
\uuuuuu repr\uuuu()
如果
\uu str\uuuuuu()
可用,但标准序列类型确实使用
\uuu repr\uuuuuuuuu()
打印其元素。