6

特定の名前 (「マイ ドライブ」など) のフラッシュ ドライブが接続されていることを Windows コンピューターが検出したときに、Python スクリプトを実行するようにしたいと考えています。

どうすればこれを達成できますか?

Windows で何らかのツールを使用する必要がありますか、またはフラッシュ ドライブが差し込まれるとすぐにフラッシュ ドライブの存在を検出する別の Python スクリプトを作成する方法はありますか? (スクリプトがコンピューター上にある場合は、それをお勧めします。)

(私はプログラミング初心者です..)

4

4 に答える 4

5

「CD」アプローチに基づいて、スクリプトがドライブのリストを列挙し、Windows がドライブ文字を割り当てるまで数秒待ってから、リストを再度列挙した場合はどうなるでしょうか。Python セットは、何が変わったのかを教えてくれますよね? 以下は私のために働いた:

# building on above and http://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
import string
from ctypes import windll
import time
import os

def get_drives():
    drives = []
    bitmask = windll.kernel32.GetLogicalDrives()
    for letter in string.uppercase:
        if bitmask & 1:
            drives.append(letter)
        bitmask >>= 1
    return drives


if __name__ == '__main__':
    before = set(get_drives())
    pause = raw_input("Please insert the USB device, then press ENTER")
    print ('Please wait...')
    time.sleep(5)
    after = set(get_drives())
    drives = after - before
    delta = len(drives)

    if (delta):
        for drive in drives:
            if os.system("cd " + drive + ":") == 0:
                newly_mounted = drive
                print "There were %d drives added: %s. Newly mounted drive letter is %s" % (delta, drives, newly_mounted)
    else:
        print "Sorry, I couldn't find any newly mounted drives."
于 2012-03-06T05:36:43.290 に答える
4

「inpectorG4dget」が提案したのと同様の方法を使用できますが、それは非常に非効率的です。

これには Win API を使用する必要があります。このページはあなたに役立つかもしれません:リンク

Python で Win API を使用するには、次のリンクをチェックしてください: Link

于 2009-12-28T13:43:48.993 に答える
3

Linux ディストリビューションを使用している場合は、 SO に関するこの質問に答えがあります。

あなたの問題に対するラウンドアバウトの(エレガントではない)解決策を考えることができますが、少なくともそれは機能します。

フラッシュ ドライブを USB ポートに挿入するたびに、Windows OS によってドライブ文字が割り当てられます。この議論の目的のために、その文字を「F」と呼びましょう。

このコードは、 cd できるかどうかを調べますf:\。に cd できる場合はf:\、「F」がドライブ文字として割り当てられていると結論付けることができ、フラッシュ ドライブが常に「F」に割り当てられるという仮定の下で、フラッシュ ドライブが差し込まれていると結論付けることができます。の。

import os
def isPluggedIn(driveLetter):
    if os.system("cd " +driveLetter +":") == 0: return True
    else: return False
于 2009-12-28T09:50:42.567 に答える