如何编写可在不同OS上运行的程序?

时间:2018-12-07 17:50:10

标签: operating-system github

我要问的问题有点不清楚,我认为仅用一行就很难解释。这是我的情况:我有一个在Linux环境和Windows环境中克隆的Bitbucket库。我遇到的问题是:

1-我需要从文件读取和写入,并且每次提交和推送时都必须更改到不同位置的路径。因此,如果我在Windows上工作并进行推送,那么当我回到Linux并需要拉出并更改我使用的路径时。

2-我正在用Python运行Selenium。为了使其在我的Linux无服务器机器上工作,我需要使用pyvirtualdisplay库创建一个虚拟显示器。因此,某些必须在我的Linux机器上执行的代码一定不能在我的Windows机器上执行。

所以我遇到的问题是,如果我在Windows计算机上工作,则需要注释掉创建虚拟显示的行。

这两个问题花了我很多时间,因为每次我拉入另一台机器时,我都无法直接处理代码,而必须先更改代码。

2 个答案:

答案 0 :(得分:1)

非常简单。您正在寻找的是导入“ os”模块。

import os

然后,您可以通过检查os.name来获取当前正在运行的操作系统的“名称”。

然后,您可以根据报告的操作系统来确定if或case语句,或者您想管理代码。

为了清楚起见,我将只在特定环境中运行的代码包装在if语句中,该语句确定哪个OS正在运行,并根据结果运行适当的代码块。

if [[ os.name == "nt" ]]; then ;do Windows stuff else ;do linux stuff fi

附加说明!那是基于常规Bash脚本的伪代码。 这是Python伪代码:

if os.name == "nt": ; Do Windows Stuff else: ; Do Linux Stuff

答案 1 :(得分:1)

第一个问题可以通过在配置文件中处理路径而不是在程序本身中进行硬编码来解决(并且可以使用pathlibos.path模块进行实际的路径操作) ,然后告诉git忽略配置文件。然后,您可以在每个系统上创建适当的配置,git根本不会打扰他们。

第二个问题可以通过使用Python提供的各种方法来解决,以弄清您正在运行的操作系统,然后使用简单的条件语句对其进行匹配。从理论上讲,您可以对路径执行相同的操作,但是从长远来看,最好养成正确地将运行时配置与程序逻辑分开的习惯。此选项包括:

  • os.name:包含posixntjava,用于标识您所使用的操作系统类型。 java适用于Jython,nt适用于Windows , posix`。当您只关心某些底层OS语义时很有用。
  • sys.platform:包含基础OS ABI的通用名称。 win32(对于Windows),darwin(对于macOS),linux(对于Linux)以及其他UNIX变体的OS名称。这使您可以检查特定的基础平台,并且通常应用于仅在一个平台上运行的条件代码。确保始终使用sys.platform.startswith('X')之类的结构进行检查,因为某些平台和Python实现在操作系统名称之后包含版本信息。
  • platform.system():类似于sys.platform,除了返回的字符串更加用户友好(对于Windows,Windows,对于Linux,Linux),它返回如果无法确定您所使用的操作系统,则返回一个空字符串。对于向用户显示操作系统很有用,但对执行条件操作则无济于事(因为它是自由格式,可能并不总是返回有用的信息)。