在我的Python3软件中,我需要检查是否安装了Git。我知道从终端可以输入以下命令:
dpkg --get-selections > filename
查找已安装的程序并将其放入文件中。
从那里,我该如何让Python查看是否安装了Git?还是有更简单的方法吗?
dpkg --get-selections > filename
查找已安装的程序并将其放入文件中。
从那里,我该如何让Python查看是否安装了Git?还是有更简单的方法吗?
import apt
cache = apt.Cache()
cache.open()
cache["git-core"].is_installed# Evaluates true if git is installed
import subprocess
try:
# pipe output to /dev/null for silence
null = open("/dev/null", "w")
subprocess.Popen("git", stdout=null, stderr=null)
null.close()
except OSError:
print("git not found")
$PATH
中的所有路径上,并测试您是否对path/git具有执行权限。subprocess.DEVNULL
而不是dev设备,这个答案在Windows CPython上也可以工作。git_found = subprocess.call(['git', '--version'], stdout=subprocess.DEVNULL) != 0
- Liam Dawson假设我们知道应用程序的启动器或二进制文件的默认安装位置,一个简单的方法就是检查其是否存在:
#! /usr/bin/env python3
#
# Query package state by installation path
import os.path
path = '/usr/bin/git'
def query_package(path):
if os.path.exists(path):
print('Git is ready to use')
else:
print('please install Git')
然而,查询已安装的软件包的另一种方法是咨询软件包管理器,在我们的情况下是dpkg:
#! /usr/bin/env python3
#
# Query package state by dpkg status
import subprocess
package = 'git'
def query_package(package):
status = subprocess.getstatusoutput("dpkg-query -W -f='${Status}' " + package)
if not status[0]:
print(status[1]) # package is installed
else:
print(status[1])
我会采用不同的方法。为了检查给定系统上是否可用Git,请检查用户的PATH中是否存在git
二进制文件,或者尝试执行git --version
。这种检查更可靠,并支持那些因各种原因在/usr/local/bin或者~/bin安装Git的人。
这并不是对你问题的直接回答,但我希望它能有所帮助。如果你需要在Python中编写代码的帮助,请告诉我,我会提供更多详细信息。
which
的输出。/usr/bin/which
不是一个内置的 shell 命令,除非我搞错了。 - BroamTLDR: 截至2022年,使用subprocess
模块(非常棒)!这是一行代码:
import subprocess; subprocess.run(["git", "--version"], stdout=subprocess.DEVNULL, check=True)
subprocess模块是Python作为一个令人惊叹的脚本语言的典范!我在所有可能导致Shell脚本难以维护和混乱的情况下都使用它。
顺便说一下,这是你现在应该使用的Python v3.5+的更新代码片段:
import subprocess
subprocess.run(["git", "--version"], stdout=subprocess.DEVNULL, check=True)
subprocess.run()
函数:在Python v3.5中引入的run()
函数是你从Python脚本中调用工具所需的全部。此外,它的check
参数会在进程以非零代码退出时抛出CalledProcessError
异常。因此,你可以通过将True
传递给run()
函数的check
参数来轻松检查工具是否已安装。