问题描述
我正在分析文件,这可能需要很多时间。 但是,当我按Ctrl + C中止脚本时,Python只会停止读取一个文件,而转到下一个文件。 它不会杀死整个脚本。 我怎样才能做到这一点?
from os import listdir
from os.path import isfile, join
folder = '...'
for folder in folders:
filesInFolder = [f for f in listdir(folder) if isfile(join(folder, f))]
for file in filesInFolder:
try:
with open(folder+'\\'+file, "r") as file:
# Analyzing
except KeyboardInterrupt:
# Kill the whole script!
就目前而言,我唯一的解决方案是杀死Python,并丢失到目前为止完成的所有工作...
1楼
将尝试移出for循环:
try:
for ....
except KeyboardInterrupt:
pass
2楼
from os import listdir
from os.path import isfile, join
import signal
def signal_handler(sig, frame):
print("Program exited with CTRL+C.")
#Add whatever you want the program to do on ctrl+c here
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
folder = '...'
for folder in folders:
filesInFolder = [f for f in listdir(folder) if isfile(join(folder, f))]
for file in filesInFolder:
with open(folder+'\\'+file, "r") as file:
# Analyzing
您想要的是一个信号处理程序,只要按下ctrl + c,它就会被调用并终止整个脚本。
尝试将此代码放在您当前的代码上方(在您有其他导入的地方使用import语句),然后尝试一下。
如果要ctrl + c做其他事情,例如关闭文件,请将其放入signal_handler
函数中。
因此,也许上面的print
您可以添加File.close()
如果你有一个文件打开,等等。