簡體   English   中英

Python:將元組轉換為字符串

[英]Python: Converting a tuple to a string

鑒於這種 :

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

在這兩種情況下, cl.communicate()返回一個由兩個元素組成的元組(如果將stdout和stderr都重定向到PIPE,則返回命令的stdout和stderr)。 在第一種情況下,您將此元組分配給result變量。 打印時,將獲得元組的文本表示。 在這種表示形式中,特殊字符(例如行尾)被轉義(到'\\ n')。

在第二種情況下,請打開元組的包裝。 這意味着:您將元組的第一個元素分配給result ,將第二個元素分配給err 由於result已經是一個字符串,因此沒有轉義就可以打印-換行符顯示為換行符而不是'\\ n'。

print很聰明。 如果將字符串傳遞給它,它只會打印出來。 如果您將其傳遞給其他對象(在此示例中為元組),則它將打印其表示形式(由repr()返回)。

字符串的表示形式為\\n ,其中字符串包含換行符。 該表示形式周圍也有引號。

嘗試將print語句更改為print repr(result) ,您會看到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM