Gleiche Funkzion wie System.getProperty() in Java

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Warum ist *genau das gleiche* so wichtig? Was an "amd64" ist inherent besser als "64bit"?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

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.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Dann zeig doch die Werte mal, die du brauchst.
Einen "verhalte dich wie Java"-Schalter gibt es nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JakobDev: Vielleicht interessiert Dich ja dieser Blogbeitrag: Where Java system properties come from.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wirklich hilfreich wäre, wenn du zeigen würdest, was der Befehl unter Java liefert.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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\\.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Dann schau dir mal die anderen Funktionen des platform Moduls an.
Speziell platform.uname()
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@JakobDev: das was Du suchst ist nicht platform.architecture sondern platform.machine.
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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``.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten