Python:将元组转换为字符串

2024-04-25 18:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于此:

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()返回此元组:

^{pr2}$

将方法中的第二行更改为

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的被剥离。。。。但是怎么做呢?在


Tags: importhttpserveroscldefcheckresult
3条回答

{tuple}仍然返回result, err = ...具有将元组解包到变量result(字符串)和{}(整数)中的效果。在

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

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

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

print很聪明。如果你给它一个字符串,它就会打印出来。如果您向它传递其他东西(本例中是元组),那么它将打印它的表示形式(由repr()返回)。在

字符串的表示有\n,其中字符串包含新行。这个表示法也有引号。在

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

相关问题 更多 >