gpt4 book ai didi

python - 如何使 Python 的 print() 成为非阻塞的?

转载 作者:行者123 更新时间:2023-12-05 04:54:07 26 4
gpt4 key购买 nike

我在 Rasberry Pi 上运行 Python 脚本,它似乎在调用 print() 时间歇性地卡住。脚本只会偶尔卡住,并在有人关注终端并按下“输入”按钮或按 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)

最佳答案

这可能是终端缓冲机制的问题。通常,遇到换行符时会刷新缓冲区,但在 Raspberry Pi 上情况可能有所不同。

您可以尝试使用flush 参数。来自 help(print):

print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.

通过使用 print("sleep", flush=True) 将立即打印字符串。

关于python - 如何使 Python 的 print() 成为非阻塞的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65876753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com