【问题标题】:Tell Python to wait/pause a 'for' loop告诉 Python 等待/暂停一个“for”循环
【发布时间】:2014-08-16 02:04:59
【问题描述】:

我有一个 Python 程序,它可以将我导航到一个具有我定义为 nav(a, b) 的函数的网站,并且在这个站点上,我将下载一些 pyfits 数据以用于另一个脚本。对于我拥有的目录中的每一组 (a,b),该站点都有一个不同的 pyfits 文件。

我想知道是否可以使用for 循环遍历此目录,并且每次使用 nav(a, b) 函数时,告诉 python 在我下载文件时暂停,然后在我告诉时再次恢复它到。我之前在IDL 中做过类似的事情,但不知道如何使用 Python。

否则我想我会卡住程序运行 200 次,每次都替换 (a, b) 值,这将永远持续下去。

【问题讨论】:

  • 请将您的代码发布为nav。你是用urllib2 或者类似的方式下载的吗?
  • 你知道文件会下载到哪里吗?如果是这样,您可以在 nav 之前列出目录,然后让 Python 轮询目录以等待新文件出现,然后,可能等待文件的大小停止更改或其他一些“已下载”的度量。

标签: python loops


【解决方案1】:

你可以使用time.sleep()来暂停执行t秒:

import time
time.sleep(1.3) # Seconds

演示:

import time

print "Start Time: %s" % time.ctime()
time.sleep(5)
print "End Time: %s" % time.ctime()

输出

Start Time: Tue Feb 17 10:19:18 2009
End Time: Tue Feb 17 10:19:23 2009

【讨论】:

  • 这有一个小问题,即知道下载文件需要多少时间。 :)
【解决方案2】:

使用input 函数。它将暂停程序,直到提示已关闭/填写。

【讨论】:

  • 这听起来像是我想做的。有使用指南吗?
  • 只搜索Python输入函数,或者使用这个链接en.wikibooks.org/wiki/Python_Programming/Input_and_Output相当于使用C#的Console.ReadLine函数,程序会等待用户在控制台输入并回车并在此之前暂停执行。
【解决方案3】:

如果要等待手动信号继续,请等待用户按Enter

Python 2:

raw_input("Press Enter to continue...")

Python 3:

input("Press Enter to continue...")

如果您可以在 python 代码中下载文件,请这样做,而不是为每个文件执行手动任务。

【讨论】:

    【解决方案4】:

    使用while 循环,等待下载完成:

    for ... :
        nav(a,b)
        while downloading_not_finished:
             time.sleep(X)
    

    因此,每X时间段测试一个条件,并再次测试直到下载部分完成。

    【讨论】:

      【解决方案5】:

      好的,这里有两种在 Python 中暂停的方法。

      1. 您可以使用输入功能。

         # Python 2
         raw_input("Downloading....")
        
         # Python 3
         input("Downloading....")
        

      这将暂停程序,直到用户按下 Enter 等。

      1. 您可以使用 time.sleep() 函数。

         import time
         time.sleep(number of seconds)
        

      这将使 Python 脚本暂停多少秒。

      【讨论】:

        【解决方案6】:

        对于设计中的Python shell

        import sys
        from time import sleep
        
        try:
            shell = sys.stdout.shell
        except:
            print('Run It In Shell')
        dots = '........';
        shell.write('Downloading')
        sleep(0.5)
        for dot in dots:
            shell.write(dot)
            sleep(0.1)
        shell.write('\n')
        sleep(0.4)
        shell.write('Saving Files')
        sleep(0.5)
        for doot in dots:
            shell.write(dot)
            sleep(0.1)
        shell.write('\n')
        sleep(0.4)
        

        对于控制台中的 Python:

        from time import sleep
        
        print('Downloading')
        sleep(1)
        print('Saving Files')
        sleep(1)
        

        【讨论】:

        • “设计”指的是什么?运行 .py 文件?与网络有关(Django/Flask)?从某个 IDE 中运行,例如 IDLE?
        【解决方案7】:

        最好的解决办法是在现有的while循环中再放一个while循环:

        while True:
        #do something
        asleep = True
        while (asleep):
            if cv2.waitKey(1) == 32: #Wait for space key  
                asleep = False
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-23
          • 1970-01-01
          相关资源
          最近更新 更多