擅长:python、mysql、java
<p>从顶部的评论来看:</p>
<ul>
<li>我需要知道操作系统是否是(开放的)SUSE,以便使用正确的包安装程序(zypper)。如果是DEBIAN(例如),我将使用apt get。。。在</li>
</ul>
<p>我建议你直接解决实际问题。与其标识操作系统,不如确定可用的包管理器。在</p>
<pre><code>import os
def file_exists(fname):
try:
os.stat(fname)
return True
except OSError:
return False
if file_exists('/usr/bin/zypper'):
... # do the SUSE case
elif file_exists('/usr/bin/apt-get'):
... # do the Debian/Ubuntu case
elif file_exists('/usr/bin/yum'):
... # do the Red Hat case
else:
raise OSError, "cannot find a usable package manager"
</code></pre>
<p>编辑:虽然这里的代码显示了检测包管理器程序,但最好是检测主包注册表本身。例如,在使用<code>dpkg</code>的Debian/Ubuntu系统上,
将有一个目录<code>/var/lib/dpkg</code>保存包数据库;这是一个确定的标志,<code>dpkg</code>或{<cd4>}是合适的。我不知道SUSE和redhat等的等效目录是什么,但是如果您支持这些目录,您可以找到答案。在</p>
<p><code>apt-get</code>已经被移植到redhatsystems,通过一个名为<code>alien</code>的程序,您可以在Debian系统上获得{<cd7>},等等。检测包数据库本身是找出正在使用的包系统的最简单的方法。在</p>
<p>如果您检测到包管理器,那么您的代码将自动在所有相关发行版上运行。如果您检测到<code>dpkg</code>数据库,您的代码将在Debian、Ubuntu、linuxmint和其他许多基于Debian的发行版上运行。如果您检测到<code>rpm</code>数据库,您的代码将在Red Hat、Centos、Fedora、Mandriva以及所有其他基于RPM的发行版上运行。在</p>