停止在windows命令提示符下运行的python脚本时避免数据丢失
我已经编写了一个Python脚本,它可以删除某些网站。我从windows命令行运行它,并使用命令行将脚本的“print()”输出定向到txt文件中 像这样: MyScraper.py>outputfmyscraper.txt 有时我必须在运行完成之前终止/停止脚本(关闭windows命令行)。这10次中有9次对outputfmyscraper.txt文件没有影响,但在关闭命令行时,文件的内容会不时被删除 除了更改scraper中的代码以将内容直接写入csv文件并完全避免使用windows命令行之外,还有没有一种方法可以在不丢失数据的情况下停止脚本停止在windows命令提示符下运行的python脚本时避免数据丢失,python,windows,bash,Python,Windows,Bash,我已经编写了一个Python脚本,它可以删除某些网站。我从windows命令行运行它,并使用命令行将脚本的“print()”输出定向到txt文件中 像这样: MyScraper.py>outputfmyscraper.txt 有时我必须在运行完成之前终止/停止脚本(关闭windows命令行)。这10次中有9次对outputfmyscraper.txt文件没有影响,但在关闭命令行时,文件的内容会不时被删除 除了更改scraper中的代码以将内容直接写入csv文件并完全避免使用windows命令行之
非常感谢。您可以通过添加
-u
开关,强制Python将标准输出切换到无缓冲模式:
python -u MyScraper.py > outputOfMyScraper.txt
另一种方法是将pythonunbuffer
环境变量设置为非空字符串:
set PYTHONUNBUFFERED=1
MyScraper.py > outputOfMyScraper.txt
通过添加
-u
开关,可以强制Python将标准输出切换到无缓冲模式:
python -u MyScraper.py > outputOfMyScraper.txt
另一种方法是将pythonunbuffer
环境变量设置为非空字符串:
set PYTHONUNBUFFERED=1
MyScraper.py > outputOfMyScraper.txt
检查一下,谢谢。对我来说,这绝大多数都是简单的jibberish:)相反,在脚本结束时使用
Ctrl+Break
,而不是关闭控制台窗口。如果使用无缓冲I/O的性能影响太大,那么使用ctypes to call将ctypes回调设置为控件处理程序。如果控件事件不是0(即Ctrl+C),则通过刷新文件来处理它。这包括Ctrl+Break以及控制台关闭时的控件关闭事件。控制台给每个连接的进程5秒钟的时间来处理关闭事件,这应该有足够的时间刷新文件。请检查此项,谢谢。对我来说,这绝大多数都是简单的jibberish:)相反,在脚本结束时使用Ctrl+Break
,而不是关闭控制台窗口。如果使用无缓冲I/O的性能影响太大,那么使用ctypes to call将ctypes回调设置为控件处理程序。如果控件事件不是0(即Ctrl+C),则通过刷新文件来处理它。这包括Ctrl+Break以及控制台关闭时的控件关闭事件。控制台给每个连接的进程5秒钟的时间来处理关闭事件,这应该有足够的时间刷新文件。谢谢,Antti。我试试这个。谢谢你,安蒂。我试试这个。