如何使用Python查找软件是否存在

18 浏览
0 Comments

如何使用Python查找软件是否存在

我有一段Python代码,在文件管理流程的一部分中使用os.system()调用gpg命令来解密一些文件。然而,在我的MacOS 10.11.6上,我有一个用于解密文件的gpg2版本。

所以我想在脚本中添加一些检查,看看机器上是否存在gpg或gpg2。

我尝试通过测试调用gpg并捕获可能的OSError来实现:

try:
    os.system("gpg --version")
except OSError:
    print("找不到gpg")

但即使没有安装gpg,这也不起作用,os.system()调用的输出是:

sh: gpg: command not found
32512

有没有办法可以做到这一点?

(附注:我不知道32512是什么意思...)

0
0 Comments

如文中所提到的,Python的os.system()方法在10多年前就被告知应该使用subprocess方法来代替。当我们想要检查一个软件是否存在时,可以使用subprocess.check_output()方法来执行相应的命令。然而,在最近的Python版本中,更推荐使用subprocess.run()方法来代替旧的API函数。

以上的代码示例中,我们尝试执行gpg --version命令来检查是否存在gpg软件。然而,由于该命令所对应的软件不存在,因此会抛出FileNotFoundError错误。

为了解决这个问题,我们可以使用subprocess.run()方法来执行命令,并通过捕获异常来处理命令执行过程中可能出现的错误。在这种情况下,我们可以捕获FileNotFoundError异常,并在捕获到该异常时输出相应的错误提示信息。

以下是使用subprocess.run()方法来检查软件是否存在的示例代码:

>>> import subprocess
>>> try:
...     subprocess.run(['gpg', '--version'], check=True)
... except subprocess.CalledProcessError as e:
...     print("软件不存在")
...
软件不存在

通过以上代码,我们可以在命令执行过程中捕获到subprocess.CalledProcessError异常,并在捕获到该异常时输出相应的错误提示信息,以判断软件是否存在。

0
0 Comments

如何使用Python查找软件是否存在

Python文档中关于os.system()的说明:

执行一个子shell中的命令(一个字符串)。这是通过调用标准C函数system()来实现的,并且具有相同的限制。对sys.stdin等的更改不会反映在执行的命令的环境中。

因此,这不是要使用的命令。你应该使用os.popen,该命令现在已废弃,并由subprocess模块代替。

此答案是你正在寻找的内容的有效示例。

要使用Python查找软件是否存在,可以使用subprocess模块中的check_output()函数。以下是一个示例代码:

import subprocess
def check_if_software_exists(software_name):
    try:
        subprocess.check_output([software_name, "--version"])
        return True
    except subprocess.CalledProcessError:
        return False
software_name = "software_name"
if check_if_software_exists(software_name):
    print("Software exists.")
else:
    print("Software does not exist.")

上述代码中,check_if_software_exists()函数接受一个软件名称作为参数,并尝试执行该软件的版本命令。如果命令成功执行,则返回True,表示软件存在。否则,返回False,表示软件不存在。

你可以将以上代码中的"software_name"替换为你要检查的软件名称,然后运行代码,即可判断该软件是否存在。

希望这对你有帮助!

0