| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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)
|