42 lines
996 B
Go
42 lines
996 B
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func getInstalledPackages() (map[string]string, error) {
|
|
// Run the dpkg-query command to list installed packages and versions
|
|
cmd := exec.Command("dpkg-query", "-W", "-f=${Package} ${Version}\n")
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Start the command execution
|
|
if err := cmd.Start(); err != nil {
|
|
return nil, err
|
|
}
|
|
defer cmd.Wait()
|
|
|
|
// Create a map to store package names and versions
|
|
installedPackages := make(map[string]string)
|
|
|
|
// Use a scanner to read the output of the command line by line
|
|
scanner := bufio.NewScanner(stdout)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
// Split each line into package name and version
|
|
parts := strings.SplitN(line, " ", 2)
|
|
if len(parts) == 2 {
|
|
packageName := parts[0]
|
|
version := parts[1]
|
|
installedPackages[packageName] = version
|
|
}
|
|
}
|
|
|
|
// Return the map with package names and versions
|
|
return installedPackages, scanner.Err()
|
|
}
|