我正在Rasberry上运行一个Python脚本,它似乎在print()调用上断断续续地冻结。脚本只是偶尔冻结,当有人聚焦于终端并按下"enter“按钮或点击ctrl+c时,脚本才会继续。
我的猜测是,这里的问题是,print()调用正在等待从终端获得某种响应,而当用户做一些意想不到的事情(比如突出显示文本、右键拖动或其他事情(我无法复制)时,它不会得到响应)。为了清楚起见,脚本在本例中无限期挂起,而不是在下面的time.sleep()调用中指定的120秒内挂起。
我的问题是:我是否可以在python中使用任何打印调用,因为它不需要等待从控制台获得响应,这样它就不会在上述未知的情况下冻结?
我已经将我的代码放在下面,尽管它所做的细节与这个问题并不特别相关。
while True:
directory_pump_files = glob.glob("./pumplog*.csv") #read in some files from the file system
for file_path in directory_pump_files:
try_upload_file(file_path, pump_files_done, "/batchUpload/create") #upload the pump file
directory_log_files = glob.glob("./log*.csv")
for file_path in directory_log_files:
try_upload_file(file_path, log_files_done, "/batchUpload/SensorReadings") #upload the log file
print ("sleep")
time.sleep(120)发布于 2021-01-24 22:50:33
这可能是终端缓冲机制的问题。通常,当遇到换行符时,缓冲区会被刷新,但是在Raspberry Pi上,情况可能会有所不同。
您可以尝试使用flush参数。来自help(print)
打印(.)print(value,.,sep=‘',end='\n',file=sys.stdout,flush=False)默认将值打印到流或sys.stdout。可选关键字参数: file:一个类似文件的对象(流);默认为当前sys.stdout。sep:值之间插入的字符串,默认为空格。end:在最后一个值之后追加的字符串,默认为换行符。冲洗:是否强行冲洗溪流。
通过使用print("sleep", flush=True),将立即打印字符串。
https://stackoverflow.com/questions/65876753
复制相似问题