Pythonでネットワークドライブの割り当てと切断(初心者向け)

Python

Pythonでネットワークドライブの割り当て、切断するには?

プログラム処理中にネットワークドライブの割り当て、切断を行い処理したい場合があります。
例えば以下のような場合が考えられます。

データバックアップ: 定期的に企業のサーバー上の重要なデータをネットワークドライブにバックアップし処理後に切断することでデータの安全性を確保します。

自動化されたファイル同期: ローカルとネットワークドライブ間でのファイル同期を自動化し、最新の文書やプロジェクトファイルが常に共有されている状態を保ちます。

ソフトウェア更新の配布: IT部門がネットワークドライブを使用して企業全体のコンピューターにソフトウェア更新を配布し、処理が完了したらドライブの割り当てを解除します。

本記事では、Pythonでネットワークドライブの割り当て、切断方法を紹介します。

※subprocessモジュールを利用して、Windowsのコマンドをキックする例で記載しています。

ネットワークドライブを操作するサンプルコード

ネットワークドライブを操作するサンプルコードを紹介します。

import subprocess
import re

def list_network_drives():
    """
    ネットワークドライブの一覧を取得します。

    Returns:
        list: ネットワークドライブの一覧(ドライブ文字、ネットワークパスのタプルのリスト)
    """
    result = subprocess.run("net use", capture_output=True, text=True, shell=True)
    lines = result.stdout.splitlines()
    
    drives = []
    for line in lines:
        # ステータスの後に続くドライブ文字とネットワークパスを抽出する正規表現
        match = re.search(r'OK\s+([A-Z]:|\s+)\s+([^ ]+)', line)
        if match:
            # ドライブ文字が空白の場合は None に置き換える
            drive_letter = match.group(1).strip() or None
            network_path = match.group(2)
            drives.append((drive_letter, network_path))

    return drives

def mount_network_drive(drive_letter, network_path, username, password):
    """
    ネットワークドライブを割り当てます。ユーザー名とパスワードで認証します。

    Args:
        drive_letter (str): 割り当てるドライブ文字(例:'Z:')
        network_path (str): ネットワークパス(例:'\\サーバー\共有')
        username (str): ネットワークリソースへのアクセスに使用するユーザー名
        password (str): ネットワークリソースへのアクセスに使用するパスワード

    Returns:
        str: コマンドの実行結果
    """
    # ユーザー名とパスワードを含むコマンドを組み立てる
    command = f"net use {drive_letter} {network_path} /user:{username} {password}"
    result = subprocess.run(command, capture_output=True, text=True, shell=True)
    
    print(result.stderr)
    return result.stdout

def disconnect_network_drive(drive_letter):
    """
    ネットワークドライブの切断を行います。

    Args:
        drive_letter (str): 切断するドライブ文字(例:'Z:')

    Returns:
        str: コマンドの実行結果
    """
    result = subprocess.run(f"net use {drive_letter} /delete", capture_output=True, text=True, shell=True)
    return result.stdout




##############################################################
# 関数のテスト
if __name__ == "__main__":

    # ユーザー名とパスワードを指定してZ: ドライブとしてネットワーク共有を割り当てる。利用者の環境に合わせて設定してください。
    drive_letter = "Z:"
    network_path = "\\\\192.168.121.101\\home"
    username = "username"
    password = "password"

    result = mount_network_drive(drive_letter, network_path, username, password)
    print("ネットワークドライブの割り当て:")
    print(result)

    # ネットワークドライブの一覧を取得して表示
    drives = list_network_drives()
    print("\n接続されているネットワークドライブ:")
    for drive, path in drives:
        print(f"{drive} {path}")


    # Z: ドライブのネットワーク接続を切断
    result = disconnect_network_drive("Z:")
    print("\nネットワークドライブの切断:")
    print(result)

実行結果

ネットワークドライブの割り当て:
コマンドは正常に終了しました。



接続されているネットワークドライブ:
Z: \\192.168.121.101\home

ネットワークドライブの切断:
Z: が削除されました。

ネットワークドライブを割り当て、ネットワークドライブの一覧表示、ネットワークドライブの切断の処理をnet useコマンドを呼び出しして行っています。

最後に

以上がPythonでネットワークドライブを操作する方法です。

バッチ処理で一時的にネットワーク利用する機会があるとおもいますので、その際には試してみてはいかがでしょうか。

コメント

タイトルとURLをコピーしました