萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> 程式語言綜合

Python 遠端統計檔案數量:透過 SSH 多程序並行處理

本文提供一個實用的 Python 腳本,透過 SSH 連線至多台遠端主機,並行統計指定目錄下的檔案數量,結果輸出為 CSV。使用 paramiko 建立 SSH 連線,multiprocessing.Pool 實現並行處理。

必要套件

pip install paramiko

核心程式碼

#!/usr/bin/python
# encoding=utf-8
import time, os, paramiko, multiprocessing

def get_total(ip, password, filepath):
    paramiko.util.log_to_file('paramiko.log')
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        start = time.time()
        ssh.connect(hostname=ip, port=22, username='root', password=password)
        stdin, stdout, stderr = ssh.exec_command('cd %s; ls | wc -l' % filepath)
        count = int(stdout.read().strip('\n'))
        elapsed = time.time() - start
        return '%s,%s,%d,%.2f\n' % (ip, filepath.strip('\n'), count, elapsed)
    except Exception as e:
        return '%s,%s,failed\n' % (ip, filepath.strip('\n'))
    finally:
        ssh.close()

# 讀取 IP 清單:每行格式 ip,password,path
iplist = open('ip.csv').readlines()
results = ['IP,FILEPATH,COUNT,TIMECOST\n']

pool = multiprocessing.Pool(processes=6)
for line in iplist:
    ip, pwd, fp = line.split(',')
    pool.apply_async(results.append, (get_total(ip, pwd, fp),))
pool.close()
pool.join()

# 寫入結果
fname = 'tongji_log_' + time.strftime('%Y%m%d%H%M%S') + '.csv'
with open(fname, 'w') as f:
    f.writelines(results)

ip.csv 格式範例

192.168.1.1,password1,/var/log
192.168.1.2,password2,/home/user/data

注意: 生產環境建議使用 SSH 金鑰認證而非密碼,並加入錯誤重試與逾時機制。

copyright © 萬盛學電腦網 all rights reserved