是的,我知道,但这是总结我想做的事情的唯一方法。
打开我想要使用的串口:
portfd = os.open(portname, os.O_RDWR | os.O_NONBLOCK)
问题是Windows下不存在O_NONBLOCK,这意味着它会在这里爆炸。我正在Windows下进行测试,以便在支持非阻止的操作系统下进行部署。
所以我真正想要的是让O_NONBLOCK消失或者为Windows环境设置#defined为0,以便我可以在没有错误的情况下开展业务。
有什么想法吗?
PS:请不要解释python如何编译/解释。我明白了,但我正在尝试传达一个想法。
答案 0 :(得分:4)
还没有人建议的另一种方法:
portfd = os.open(portname, os.O_RDWR | getattr(os, 'O_NONBLOCK', 0))
这是默认任何可能不存在的属性的简便方法。
答案 1 :(得分:2)
您可以使用try / except块,例如
try:
options = os.O_RDWR | os.O_NONBLOCK
except NameError:
options = os.O_RDWR
portfd = os.open(portname, options)
这是使用Python方法,它更容易请求宽恕而不是许可。
答案 2 :(得分:1)
显然没有编译时/运行时区别。你可以做的是检查sys.platform
的值。
答案 3 :(得分:0)
检查sys.platform
或os.name
。
答案 4 :(得分:0)
你在做什么才真正需要低级os.open
API?在不支持O_NONBLOCK的操作系统上你打算做什么?如果后续代码实际上并不依赖于你打开的O_NONBLOCK属性,那么这只是一个优化,还是什么?
您可以通过检查os.name
字符串来检查环境。
您可以申请EAFP。
例如:
def file_mode_for_funky_special_purpose():
try: return os.O_RDWR | os.O_NONBLOCK
except AttributeError: return # whatever it is that you want for other systems
portfd = os.open(portname, file_mode_for_funky_special_purpose())