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()
打印其元素。