首页 > 解决方案 > 如何编写 Python 代码来支持 Windows 和 Linux?

问题描述

我有一些代码需要在 Windows 和 Linux 上做非常相似的事情。不幸的是,我需要几个特定于系统的功能(例如隐藏文件:Python 跨平台隐藏文件)。编写代码以提高可读性和可维护性的最佳方式是什么?

目前,代码使用许多if语句在不同平台上表现不同。我考虑过的另一种方法是将代码拆分为两个单独的函数,一个用于 Windows,一个用于 Linux,但这意味着在两个地方更新代码的主要部分。

请注意,代码的主要部分比这要长得多且复杂得多。

组合方法(最大的可维护性,但有很多if语句):

import os

def sort_out_files():
    if is_linux:
        do_linux_preparations()
    else:
        do_windows_preparations()

    # Main part of the code:
    for file in os.listdir(folder):
        if is_correct_file(file):
            if is_linux:
                do_main_actions_for_linux()
            else:
                do_main_actions_for_windows()

    if is_linux:
        do_linux_tidying_up()
    else:
        do_windows_tidying_up()

单独的方法(需要更多维护但需要更少的if语句):

import os

def sort_out_files_linux():
    do_linux_preparations()

    # Main part of the code:
    for file in os.listdir(folder):
        if is_correct_file(file):
            do_main_actions_for_linux()

    do_linux_tidying_up()


def sort_out_files_windows():
    do_windows_preparations()

    # Main part of the code:
    for file in os.listdir(folder):
        if is_correct_file(file):
            do_main_actions_for_windows()

    do_windows_tidying_up()

def sort_out_files():
    if is_linux:
        sort_out_files_linux():
    else:
        sort_out_files_windows()

和功能涉及复制文件do_preparations()do_tidying_up()提取等。

is_correct_file()检查文件是否具有正确的名称和正确的时间戳。

do_main_actions()涉及分析、移动和隐藏文件。

上面的例子都有效,但似乎不是最 Pythonic 或长期代码可维护性的最佳方法。

标签: pythonlinuxwindows

解决方案


我会将仅适用于一个操作系统的所有内容放在一个文件中,但名称相同。然后你可以在你的主文件的开头添加这样的东西:

if is_linux:
    import linux_tools as tools
else:
    import windows_tools as tools

如果这两个文件具有相同的接口(例如顶级方法),它们可以互换使用。

在您的示例中,linux_toolsandwindows_tools都将包含它们各自的实现sort_out_files,但都命名为sort_out_files,因此您可以将其与tools.sort_out_files.

请记住在这些模块中保留尽可能多的通用代码。


推荐阅读