python-3.6 - 为什么我的代码在 python2 中运行而不在 python3 中运行
问题描述
import os
import time
CONSOLE = "/dev/tty0"
logfd = None
def log_me(logstr):
global logfd
global CONSOLE
print(time.strftime("%c")+": "+logstr)
if not logfd:
if not os.path.exists(CONSOLE):
return
logfd = open(CONSOLE, "a")
if not logfd:
return
logfd.write(logstr+"\n")
logfd.flush()
return
测试.py
from consolelog import log_me
print ("Hello World!")
log_me("This is a Hello World script")
log_me("Logging 2nd time to see how it works.")
log_me("loging 3rd time")
与 python2 一起使用时相同的代码正在工作,但在与 python3 一起运行时抛出错误 29 非法搜索
[root@869ebe33-77e8-41b4-918b-eafda978fd98 ~]# python test.py
Hello World!
2021 年 4 月 14 日星期三 07:37:03:这是一个 Hello World 脚本
2021 年 4 月 14 日星期三 07:37:03:第二次记录以查看它是如何工作的。
2021 年 4 月 14 日星期三 07:37:03:第三次登录
用python3输出
[root@869ebe33-77e8-41b4-918b-eafda978fd98 ~]# python3 test.py
Hello World!
2021 年 4 月 14 日星期三 07:37:10:这是一个 Hello World 脚本
Traceback(最近一次调用最后一次):
文件“test.py”,第 4 行,在
log_me(“这是一个 Hello World 脚本”)
文件“/root /consolelog.py",第 14 行,在 log_me
logfd = open(CONSOLE, "a")
OSError: [Errno 29] Illegal seek
解决方案
使用 python3.x append 不适用于 open(/dev/tty0) 所以我们必须使用 write 而不是 append。
推荐阅读
- vim - 将运行 neovim 的终端标题更改为 appimage
- java - 接口 io.javabrains.repository.DepartmentRepository 的问题
- gitversion - 如何通过 GitVersion 禁用使用分支名称
- machine-learning - BERT 中的 TokenEmbeddings 是如何创建的?
- python-3.x - 如何防止字节 b'\x3f' 变成 b'?在 Python 3 中打印时
- c# - 在 jetbrains 骑手中找不到 aspx.cs
- winapi - 在 ScrollWindow() 之后更新窗口。WinAPI
- servicestack - ServiceStack 中的补丁
- java - Jersey Exception Mapper 关于异常原因
- import - 从不正确的模块(具有相同的名称)、VSC 导入 Python