python: use different function depending on os
我想写一个将在Linux和Solaris上执行的脚本。大多数逻辑在两个操作系统上都是相同的,因此我只写一个脚本。但是,由于某些部署的结构会有所不同(文件位置、文件格式、命令语法),因此两个平台上的两个函数会有所不同。
这可以像处理
1 2 3 4 5 6 | if 'linux' in sys.platform: result = do_stuff_linux() if 'sun' in sys.platform: result = do_stuff_solaris() more_stuf(result) ... |
然而,在整个代码中散布这些
关于如何做到这一点有什么更好的想法吗?
解决方案1:
为需要复制和导入正确函数的每个函数创建单独的文件:
1 2 3 4 5 6 7 8 9 10 11 | 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:
如果您需要将所有内容保存在一个文件中,或者只是不喜欢条件导入,则可以始终为类似这样的函数创建别名:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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) |
你可以这样做:
1 2 3 4 5 6 7 8 | if 'linux' in sys.platform: def do_stuff(): result = # do linux stuff more_stuff(result) elif 'sun' in sys.platform: def do_stuff(): result = # do solaris stuff more_stuff(result) |
然后简单地调用