Seite 1 von 1

Ländereinstellungen

Verfasst: Mittwoch 12. Oktober 2005, 14:37
von be_veronic
Hallo,

Weisst jemand wie ich Ländereinstellungen mit Python ändern kann?
Danke im voraus.

Verfasst: Mittwoch 12. Oktober 2005, 14:55
von jens
Schau dir mal das Module locale an: http://www.python.org/doc/current/lib/m ... ocale.html

Verfasst: Donnerstag 13. Oktober 2005, 10:59
von be_veronic
Danke jens, ich hab die locale Module angeschaut aber ist nur fuer Unix gedacht, oder?

Verfasst: Donnerstag 13. Oktober 2005, 22:05
von BlackJack
be_veronic hat geschrieben:Danke jens, ich hab die locale Module angeschaut aber ist nur fuer Unix gedacht, oder?
Nein, das sollte auf jedem System funktionieren das die `locale` Funktionen der ANSI C Standardbibliothek unterstützt.

Am einfachsten und am portababelsten kann man übrigens mit ``locale.setlocale(locale.LC_ALL, '')`` (der zweite Parameter ist eine leere Zeichenkette) auf die Sprache umstellen, die der Anwender bzw. das Betriebssystem benutzt. Ansonsten sind die Namen für `locale` Einstellungen leider nicht besonders genormt.

Verfasst: Freitag 14. Oktober 2005, 06:34
von jens
Hab gerade noch ein bischen mit local gespielt:

Code: Alles auswählen

import time, locale

locale.setlocale(locale.LC_ALL, '')
print locale.getlocale()
print locale.getdefaultlocale()
print locale.getpreferredencoding()
print locale.format("%.2f",1200000.575,1)
for k,v in locale.localeconv().iteritems():
    print "%20s: %s" % (k,v)
Ergibt bei mir das:

Code: Alles auswählen

('de_DE', '1252')
('de_DE', 'cp1252')
cp1252
1.200.000,58
   mon_decimal_point: ,
     int_frac_digits: 2
      p_sep_by_space: 1
         frac_digits: 2
       thousands_sep: .
         n_sign_posn: 1
       decimal_point: ,
     int_curr_symbol: EUR
       n_cs_precedes: 0
         p_sign_posn: 1
   mon_thousands_sep: .
       negative_sign: -
     currency_symbol: €
      n_sep_by_space: 1
        mon_grouping: [3, 0]
       p_cs_precedes: 0
       positive_sign: 
            grouping: [3, 0]

Verfasst: Freitag 14. Oktober 2005, 09:59
von be_veronic
Danke für Ihre Antworten. Das Problem ist dass ich folgende Skript an einem deutsch sprachige OS ausführen möchte:

Code: Alles auswählen

import win32pdh
   object = 'Process'
   items, instances = win32pdh.EnumObjectItems(None, None, object, 
                                               win32pdh.PERF_DETAIL_WIZARD)
   instance_dict = {}
   for instance in instances:
      try:
         instance_dict[instance] = instance_dict[instance] + 1
      except KeyError:
         instance_dict[instance] = 0
   for instance, max_instances in instance_dict.items():
      for inum in xrange(max_instances+1):
         hq = win32pdh.OpenQuery()
         hcs = []
         for item in ['ID Process', 'Creating Process ID']:
            path = win32pdh.MakeCounterPath((None,object,instance,
                                             None,inum,item))
            hcs.append(win32pdh.AddCounter(hq,path))
         win32pdh.CollectQueryData(hq)
         print "%-15s\t" % (instance[:15]),
         for hc in hcs:
            type,val=win32pdh.GetFormattedCounterValue(hc,win32pdh.PDH_FMT_LONG)
            print "%5d" % (val),
            win32pdh.RemoveCounter(hc)
         print
         win32pdh.CloseQuery(hq)
Wenn ich statt "Process" , "Prozess" eingebe dann läuft es bis AddCounter. Es funktioniert nur wenn ich Systemsteuerung->Ländereinstellungen auf English setze. Aber dass möchte ich nicht manuell sondern in dem Python skript machen.
Danke im voraus.

Edit (Leonidas): Code in Python-Tags gesetzt, aber einrücken werde ich nicht.

Verfasst: Freitag 14. Oktober 2005, 10:29
von jens
be_veronic hat geschrieben:Es funktioniert nur wenn ich Systemsteuerung->Ländereinstellungen auf English setze. Aber dass möchte ich nicht manuell sondern in dem Python skript machen.
Ich denke nicht, das es aus Python einfach geht. Und macht es überhaupt Sinn?

Was sagt denn locale.getdefaultlocale() ??? Kannst du da nicht sowas machen wie:

Code: Alles auswählen

if locale.getdefaultlocale()[0] == "de_DE":
    object = 'Prozess'
else:
    object = 'Process'
Besser vielleicht du probierst es einfach mit 'Prozess' und wenn das nicht klappt probierst du 'Process'...

Natürlich funktionieren beide Geschichten nur auf einem deutschen und englischen Windows...

Verfasst: Freitag 14. Oktober 2005, 11:58
von be_veronic
Hi jens,

Obwohl ich statt Process Prozess eingebe, ich bekomme noch folgende Fehlermeldung. Es läuft alles nur wenn ich als Ländereinstellung English wähle, locale.setlocale(locale.LC_ALL,'en') reichts leider nicht.

Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "C:\Python24\lib\site-packages\enum.py", line 25, in ?
hcs.append(win32pdh.AddCounter(hq , path))
error: (-1073738823, 'AddCounter', 'No error message is available')

Verfasst: Freitag 14. Oktober 2005, 22:24
von BlackJack
Wenn ich das jetzt richtig verstehe willst Du nicht die Einstellung des/Deines Python Programms ändern sondern die eines anderen bzw. des Betriebssystems. Dann ist das `locale` Modul die falsche Baustelle.

Verfasst: Montag 17. Oktober 2005, 12:29
von be_veronic
Hi BlackJack,

Die Einstellungen des Betriebsystems will ich ändern, geht dass mit Python, und weisst du wie?
Danke.

Verfasst: Montag 17. Oktober 2005, 14:42
von jens
Nur, ich möchte nur nochmal zu bedenken geben, das es IMHO nicht der richtig Weg ist, die Betriebssystem locales zu verstellen, nur damit du an die Daten rankommst :roll:

Das muß irgendwie auch anders gehen...