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:以便整个程序重复。

(再次,我同意这是一种“hackish”且效率低下的方式来完成这项任务)

于 2013-10-21T23:48:11.220 回答
2

带有一些任意sleeps 的循环不是一个好主意(根本)。它使您的程序对事件的响应性降低,因为它至少需要 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 回答