0

フラッシュドライブが接続されたときにコードを検出してから、コードを続行しようとしています。現在「os.path.exists」を使用しています。フラッシュドライブが接続されている状態でコードを開始すると、コードは正常に機能しますが、フラッシュドライブが接続されていないときに開始し、コードの実行中に接続しようとすると、コードはフラッシュドライブが接続されているかどうかを確認しませんコードを強制的にスリープさせ続けます。コードを機能させるにはどうすればよいですか?

import os
import sys
import datetime
from datetime import datetime
import shutil
import time

#Wait for FlashDrive to be connected

if os.path.exists("F:\"):
    connected = 1
else:
    connected = 0

while connected == 0:
    print "..."
    time.sleep(10)

#Get current date
currentdate=datetime.now().strftime("%m-%d-%Y")
print "Photos saved: " + currentdate

#Copy and rename DCIM
src = "F:/Pictures"
dst = "C:/Users/Josh/Desktop/photos/" + currentdate
shutil.copytree(src, dst)

コードはループであり、iPhone が接続されるたびに実行され、実行が停止することはありませんが、実際にフラッシュドライブをチェックしないと、コードを動作させることができません。

4

2 に答える 2

2

あなたの問題は、connected変数をループの外側に設定したため、更新されないことです。

試す:

while not os.path.exists('F:\'):
    print("...")
    time.sleep(10)

- 編集 - -

次に、最後に削除されるのを待ちます。

while os.path.exists('F:\'):
    print("...")
    time.sleep(10)

while True:そして最後に、プログラム全体が繰り返されるように、全体を大きくラップします。

(繰り返しますが、これは「ハック」であり、このタスクを行うには非効率的な方法であることに同意します)

于 2013-10-21T23:48:11.220 に答える
2

任意sleepの s を使用したサイクルは (まったく) 良い考えではありません。反復の開始時に発生したイベントをキャッチするのに少なくとも N ミリ秒かかるため、プログラムのイベントに対する応答性が低下します*。また、大量の API 呼び出しにより CPU を浪費します。

  1. ウィンドウを作成します。
  2. メッセージ ループで WM_DEVICECHANGE メッセージを聞きます。デバイス構成が変更されるたびに起動しますが、その方法はわかりません。
  3. そのような場合は、現在の構成を尋ねてください。

ここでチュートリアルを見つけることができます。また、SO で同様の回答を見てください。

(*)sleepの場合、実際には次の各システムティックでテストしますtime_passed >= sleep_timeout。その場合は、プログラムに戻ります。問題は、古い PC ではシステム ティックが 1/18秒 (56 ミリ秒) になる可能性があるため、10 ミリ秒の遅延が発生することはありません。

于 2013-10-21T23:48:28.327 に答える