Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用按键重复一个功能_Python_Python 2.7_Keystroke - Fatal编程技术网

Python 使用按键重复一个功能

Python 使用按键重复一个功能,python,python-2.7,keystroke,Python,Python 2.7,Keystroke,我有一个备份脚本,它只是每天运行,并将文件备份到一个目录中(如果它们存在于源目录中,但不存在于目标目录中) 有时(很少)如果文件权限不正确,脚本会崩溃 我已经用try/except块解决了这个问题 但是,我现在要做的是显示来自except块的错误消息,然后说 >>> Press Enter to re-run backup 然后让脚本重新运行复制过程,这是一个已定义的函数 因此,总结如下: 脚本运行 脚本抛出错误 用户按照错误消息中的说明操作 用户按“回车”键重新运行复制功能

我有一个备份脚本,它只是每天运行,并将文件备份到一个目录中(如果它们存在于源目录中,但不存在于目标目录中)

有时(很少)如果文件权限不正确,脚本会崩溃

我已经用
try/except
块解决了这个问题

但是,我现在要做的是显示来自
except
块的错误消息,然后说

>>> Press Enter to re-run backup
然后让脚本重新运行复制过程,这是一个已定义的函数

因此,总结如下:

  • 脚本运行
  • 脚本抛出错误
  • 用户按照错误消息中的说明操作
  • 用户按“回车”键重新运行复制功能

  • 如果这有什么不同的话,我正在运行windows(当我用谷歌搜索这个问题时,很多结果都与windows上的python有关)

    对我来说似乎很简单。您可以使用
    raw\u input
    让脚本等待回车键:

    while True:
        try:
            # run the script
        except SomeException as e:
            # print the error message and recovery instructions
    
            raw_input('Press Enter to re-run backup.')
    

    您可以使用
    raw\u input()
    (或者如果使用Python 3,只需
    input()
    )等待
    Enter
    和一个条件变量来控制复制过程中的循环,直到成功

    from sys import stderr
    
    def run_backup():
        print "running backup"
        raise  # this simulates an error
    
    
    backup_completed = False
    
    while not backup_completed:
        try:
            run_backup()
            backup_completed = True
        except:
            print >> stderr, "Error message..."
            raw_input(">>> Press Enter to re-run backup")
    

    这将重新运行脚本。我想我理解您在错误等方面所写的内容。但在按enter键时,重复执行
    run\u backup
    ,它将再次调用
    run\u backup()
    。这不是预期的行为吗?这正是我想要的。我只是对python有点陌生,仍然在学习一些东西,所以我不是100%确定它能做到这一点。这很好:)正如您所看到的,
    run\u backup()
    函数中的
    raise
    就是用来模拟错误情况的。另外,如果这个答案是正确的,请接受它,这样它可能对其他人也有用。可能的重复不是重复。击键不是我问题的主要部分。更重要的是,在显示错误消息后,识别该击键以重新运行函数。尽管阅读此问题的人可能会发现该问题也很有用,谢谢。