[英]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.