import paramiko from scp import SCPClient import os import time # ===================== 配置 ===================== JUMP_HOST = "183.252.196.135" JUMP_PORT = 22 JUMP_USER = "root" # 如果你有密码就填密码,有密钥就留空 JUMP_PASSWORD = "9Mp$ctw6k~(W" # 有密码就写在这里 JUMP_KEY_PATH = None # 有密钥文件就填路径 # 远程 wav 目录 REMOTE_WAV_DIR = "/opt/upload-service/static-6009/RTMP_pict/wav" # 本地保存目录 LOCAL_DIR = r"/Users/alien/Desktop/Digital_Human/Image_Analysis/wav/wav" # 拉取间隔(秒) INTERVAL = 1 # ================================================= # 确保本地文件夹存在 os.makedirs(LOCAL_DIR, exist_ok=True) def create_ssh(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: if JUMP_PASSWORD: ssh.connect( JUMP_HOST, port=JUMP_PORT, username=JUMP_USER, password=JUMP_PASSWORD, timeout=10 ) else: ssh.connect( JUMP_HOST, port=JUMP_PORT, username=JUMP_USER, key_filename=JUMP_KEY_PATH, timeout=10 ) return ssh except Exception as e: return None def list_remote_files(ssh): try: stdin, stdout, stderr = ssh.exec_command(f"ls -1 {REMOTE_WAV_DIR}") return [line.strip() for line in stdout if line.strip()] except: return [] def pull_new_files(): ssh = create_ssh() if not ssh: return try: remote_files = list_remote_files(ssh) local_files = set(os.listdir(LOCAL_DIR)) new_files = [f for f in remote_files if f not in local_files and f.endswith(".wav")] if new_files: with SCPClient(ssh.get_transport()) as scp: for f in new_files: remote_path = f"{REMOTE_WAV_DIR}/{f}" local_path = os.path.join(LOCAL_DIR, f) scp.get(remote_path, local_path) print(f"✅ 已拉取: {f}") except Exception as e: pass finally: ssh.close() if __name__ == "__main__": print("=" * 60) print("🚀 本地实时拉取 wav 音频(纯Python版)") print(f"📂 本地: {LOCAL_DIR}") print("=" * 60) while True: pull_new_files() time.sleep(INTERVAL)