python:根据操作系统使用不同的功能

标签 python cross-platform

我想编写一个将在 Linux 和 Solaris 上执行的脚本。大多数逻辑在两个操作系统上都是相同的,因此我只写了一个脚本。但是由于某些部署的结构会有所不同(文件位置、文件格式、命令语法),因此两个平台上的一些功能会有所不同。

这可以这样处理

if 'linux' in sys.platform:
    result = do_stuff_linux()
if 'sun' in sys.platform:
    result = do_stuff_solaris()
more_stuf(result)
...

然而,在整个代码中散布这些 ifs 似乎既麻烦又不雅观。我也可以在一些 dict 中注册函数,然后通过字典调用函数。可能会好一点。

关于如何做到这一点有更好的想法吗?

最佳答案

解决方案一:

您为每个需要复制和导入正确的函数创建单独的文件:

import sys
if 'linux' in sys.platform:
    from .linux import prepare, cook
elif 'sun' in sys.platform:
    from .sun import prepare, cook
else:
    raise RuntimeError("Unsupported operating system: {}".format(sys.platform))

dinner = prepare('pork')
drink_wine()
result = cook(dinner)

解决方案 1.5:

如果您需要将所有内容保存在一个文件中,或者只是不喜欢条件导入,您总是可以像这样为函数创建别名:

import sys

def prepare_linux(ingredient):
    ...

def prepare_sun(ingredient):
    ...

def cook_linux(meal):
    ...

def cook_sun(meal):
    ...

if 'linux' in sys.platform:
    prepare = prepare_linux
    cook = cook_linux
elif 'sun' in sys.platform:
    prepare = prepare_sun
    cook = cook_sun
else:
    raise RuntimeError("Unsupported operating system: {}".format(sys.platform))

dinner = prepare('chicken')
drink_wine()
result = cook(dinner)

关于python:根据操作系统使用不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540782/

相关文章:

html - 如何制作一个只接受pdf和doc的文件字段

entity-framework - 跨平台共享代码的最佳实践

python - 如何在 Django 中测试 celery period_task?

Python markdown 强制 <ul> 而不需要前面的空行

python - while、if 和 for 循环。 Python 上的第一个字母,最后一个字母游戏

java - Windows:如何获取所有可见窗口的列表?

python - 是否可以根据消息部分禁用 pylint 规则?

python - 使用 lxml 在 python 中编码 - 复杂的解决方案

python - 需要有关使用 gui 创建桌面应用程序的帮助/指导

c++ - C++ 中的枚举类型是跨平台的吗?