มี 2 วิธีหลัก: ใช้ scp command ผ่าน subprocess หรือใช้ paramiko + scp module
วิธีที่ 1: subprocess + scp command (ง่าย ไม่ต้อง library เพิ่ม)
import subprocess import os p = subprocess.Popen(["scp", "my_file.txt", "username@server:/remote/path"]) sts = os.waitpid(p.pid, 0) # รอจน copy เสร็จ # หรือใช้ run() (Python 3.5+) subprocess.run(["scp", "my_file.txt", "username@server:/remote/path"], check=True)
วิธีที่ 2: Paramiko + SCPClient (Programmatic, ใช้ SSH Connection เดียว)
# pip install paramiko scp
from paramiko import SSHClient
from scp import SCPClient
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('user@server:path')
with SCPClient(ssh.get_transport()) as scp:
scp.put('my_file.txt', 'my_file.txt') # (local, remote)
# scp.put('local_dir', 'remote_dir', recursive=True) # โฟลเดอร์
ssh.close()
ดาวน์โหลดจาก Server (Get)
with SCPClient(ssh.get_transport()) as scp:
scp.get('remote_file.txt', 'local_file.txt')
# scp.get('remote_dir', 'local_dir', recursive=True)
เปรียบเทียบ
| วิธี | ข้อดี | ข้อเสีย |
|---|---|---|
| subprocess + scp | ง่าย ไม่ต้อง import เพิ่ม, ใช้ CLI scp ปกติ | Process ใหม่ทุกครั้ง, ไม่ได้ reuse SSH connection |
| Paramiko + SCPClient | Reuse SSH connection, Programmatic control, Progress callback | ต้อง install paramiko, scp |