Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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
停止在windows命令提示符下运行的python脚本时避免数据丢失_Python_Windows_Bash - Fatal编程技术网

停止在windows命令提示符下运行的python脚本时避免数据丢失

停止在windows命令提示符下运行的python脚本时避免数据丢失,python,windows,bash,Python,Windows,Bash,我已经编写了一个Python脚本,它可以删除某些网站。我从windows命令行运行它,并使用命令行将脚本的“print()”输出定向到txt文件中 像这样: MyScraper.py>outputfmyscraper.txt 有时我必须在运行完成之前终止/停止脚本(关闭windows命令行)。这10次中有9次对outputfmyscraper.txt文件没有影响,但在关闭命令行时,文件的内容会不时被删除 除了更改scraper中的代码以将内容直接写入csv文件并完全避免使用windows命令行之

我已经编写了一个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。我试试这个。谢谢你,安蒂。我试试这个。