Python 中的 SCP

Rana Hasnain Khan 2022年12月26日 2022年5月17日
Python 中的 SCP

我們將介紹 Python 中的 SCP 以及如何在我們的 Python 應用程式中使用 SCP 來傳送和接收檔案。

在 Python 中使用 Scp.py

隨著科技的進步,程式設計扮演著重要的角色。Python 是一種語言,它已證明其在廣泛的領域具有最大的多功能性。

Python 有許多模組可以幫助程式設計師覆蓋許多領域並讓 Python 取得成功。scp.py 是一個開源 Python 庫,用於使用 paramiko 傳輸在客戶端和伺服器之間傳送和接收檔案。

SCP 提供了使用 SCP1 協議的程式設計介面。SCP1 協議幫助我們在伺服器和客戶端之間的單個 TCP 連線上進行多個對話。

SCP 提供了幾種方法,這些方法提供了在伺服器和客戶端之間共享檔案資源的不同功能。

現在,讓我們使用 CLI 安裝 SCP 模組,如下所示。

# python
pip install scp

該命令將安裝 SCP 庫,現在我們可以在示例中使用它。因此,在我們的示例中,我們將從 paramiko 模組匯入 SSHClient 以建立客戶端和伺服器之間的連線。

我們還將從 SCP 模組匯入 SCPClient 來定義檔案共享協議。匯入後,我們將初始化客戶端物件,並通過伺服器進行連線。

現在,我們將啟動將 SSHClient 傳輸作為引數的 SCP 客戶端物件。

之後,我們將使用 put() 方法傳送我們的檔案。put() 方法使用檔名作為引數。

我們還可以使用另一種方法 get() 從伺服器下載檔案。我們將使用它從伺服器下載檔案,如下所示。

# python
from paramiko import SSHClient
from scp import SCPClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('test.net')

scp = SCPClient(ssh.get_transport())

scp.put('example.txt', 'example2.txt')

scp.get('example2.txt')

現在讓我們討論如果我們必須上傳目錄而不是檔案,我們可以做什麼。我們可以使用 put() 方法,如下所示。

# python
scp.put('example', recursive=True, remote_path='/home')

從上面的示例中可以看出,我們將名為 example 的整個目錄從本地計算機傳送到伺服器。我們還可以使用關鍵字引數名稱 remote_path 將路徑指定為伺服器計算機的引數。

現在讓我們通過一個示例來跟蹤我們從伺服器傳送或下載的檔案的進度。我們將實現一個進度函式,寫入共享檔案的進度。

如下所示,我們將使用另一個稱為 progress() 的函式。

# python
from paramiko import SSHClient
from scp import SCPClient
import sys

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('test.com')

def progress(filename, filesize, filesent):
    sys.stdout.write("%s's progress: %.2f%%   \r" % (filename, float(filesent)/float(filesize)*100) )

scp = SCPClient(ssh.get_transport(), progress=progress)

def progress4(filename, filesize, filesent, peername):
    sys.stdout.write("(%s:%s) %s's progress: %.2f%%   \r" % (peername[0], peername[1], filename, float(filesent)/float(filesize)*100) )
scp = SCPClient(ssh.get_transport(), progress4=progress4)

scp.put('example.txt', '~/example.txt')

scp.close()

因此,通過這種方式,我們可以使用 Python 中的 SCP 庫輕鬆地從伺服器傳送和下載檔案。

Rana Hasnain Khan avatar Rana Hasnain Khan avatar

Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.

LinkedIn