Seite 1 von 1

Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 14:49
von JakobDev
Bei meinem aktuellen Projekt bekomme ich als Input Werte, die ein Betriebssystem beschreiben. z.B. name": "windows". Diese Werte will ich jetzt mit Python abgleichen. Das Problem dabei ist allerdings, dass sich diese Werte an Java orientieren. So teht dort z.B.

Code: Alles auswählen

"arch": "x86"
Wenn ich in Java System.getProperty("os.arch") ausfühere, bekomme ich als Antwort amd64. Wenn ich jedoch in Python platform.architecture()[0] ausführe, erhalte ich als Antwort '64bit'und nicht amd64. Bei der Archtiektur konnte ich es noch mit einer einfachen if Abfrage lösen. Bei der Abfrage der Version komme ich allerdings nicht weiter.

Deshalb meine frage:
Gibt es in Python eine Funktion, die genau die gleiche Ausgabe erzeugt wie System.getProperty() von Java.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 14:54
von __deets__
Nein. Warum ist *genau das gleiche* so wichtig? Was an "amd64" ist inherent besser als "64bit"?

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 15:02
von sparrow
Was für eine Information willst du denn überhaupt haben? Von was für einer Version sprichst du?
Eine 32bit-Installation von Python wird dir unter einem 64bit-Betriebssystem auch "32bit" ausgeben, wenn du platform.architecture() benutzt.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 15:06
von JakobDev
Ich rede davon, dass in der JSON Datei Werte stehen, dich ich mit dem Betriebssystem, auf dem das Programm läuft abgleichen muss. Und diese Werte, die ich abgleichen muss, stellen den Output von System.getProperty() in Java dar.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 15:08
von sparrow
Dann zeig doch die Werte mal, die du brauchst.
Einen "verhalte dich wie Java"-Schalter gibt es nicht.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 15:12
von __blackjack__
@JakobDev: Du kannst natürlich immer versuchen Java von Python aus anzusprechen. Entweder per `subprocess` und ein kleines Java-Programm zu schreiben, oder zum Beispiel per JPype. Oder man könnte mit `execnet` das ganze per Jython abfragen.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 15:31
von __blackjack__
@JakobDev: Vielleicht interessiert Dich ja dieser Blogbeitrag: Where Java system properties come from.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 16:04
von JakobDev
Am meisten interessieren würde mich momentan, wie man die Ausgabe von System.getProperty(""os.version"). Der Rest wäre zwar nett, aber denn kann ich mit if umgehen. Wie kommt den da die Ausgabe zustande?

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 16:36
von sparrow
Wirklich hilfreich wäre, wenn du zeigen würdest, was der Befehl unter Java liefert.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 16:41
von JakobDev
Unter Linux wird mit System.getProperty("os.version") beispielsweise folgendes zurückgeben:

Code: Alles auswählen

3.10.0-1062.1.1.el7.x86_64
Windows habe ich gerade leider nicht zur Verfügung.

Unter Windows 10 sollte es beispielsweise mit folgender regex übereinstimmen:

Code: Alles auswählen

^10\\.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 16:43
von sparrow
Dann schau dir mal die anderen Funktionen des platform Moduls an.
Speziell platform.uname()

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 16:58
von Sirius3
@JakobDev: das was Du suchst ist nicht platform.architecture sondern platform.machine.

Re: Gleiche Funkzion wie System.getProperty() in Java

Verfasst: Montag 25. November 2019, 17:36
von __blackjack__
Use the source. Wie im Blog das ich verlinkt habe beschrieben, kann man sich das in den OpenJDK-Quellen anschauen was da für die verschiedenen Betriebssysteme gemacht wird. Es gibt je eine Datei für Windows und eine für Unix-basierte Systeme. Hier der Ausschnitt der `os_version` unter unixoiden Systemen setzt:

Code: Alles auswählen

/* os properties */
    {
#ifdef MACOSX
        setOSNameAndVersion(&sprops);
#else
        struct utsname name;
        uname(&name);
        sprops.os_name = strdup(name.sysname);
#ifdef _AIX
        {
            char *os_version = malloc(strlen(name.version) +
                                      strlen(name.release) + 2);
            if (os_version != NULL) {
                strcpy(os_version, name.version);
                strcat(os_version, ".");
                strcat(os_version, name.release);
            }
            sprops.os_version = os_version;
        }
#else
        sprops.os_version = strdup(name.release);
#endif /* _AIX   */
#endif /* MACOSX */
Wie man sieht unterscheidet der Quelltext zwischen Mac OSX, AIX, und sonstigen (Linux), und bei den sonstigen ist es einfach `release` vom `uname()`-Aufruf. Also in Python ``os.uname().release``.