Seite 1 von 1

os.system() mit Variable?

Verfasst: Montag 9. September 2013, 10:09
von s1l3nz
Hallo liebe Python-Gemeinde.
ich versuche nun schon seit Stunden eine Verknüpfung auf dem Desktop mit os.system aus zu führen. Wenn ich den Pfad manuell eingebe klappt das auch, aber da mein Programm für alle Nutzer des Rechners funktionieren soll, muss ich in der Pfadangaben eine Variable für den User einbetten.
Zusätzlich macht WindowsXP auch noch mucken, wegen den "Leerzeichen" in "Dokumente und Einstellungen".
Kann mir bitte jemand helfen?

Code:

Code: Alles auswählen

User=getpass.getuser()

def test():
    Datei='"C:/Dokumente und Einstellungen/Flo/Desktop/IcoFX.lnk"'
    print Datei
    os.system(Datei)
    
#GUI
Main=tk.Tk()
b=tk.Button(Main, command=test, text="Klick mich zum Testen", font="hevetica 15")
b.pack()
Main.mainloop()

mit Variable:
Datei='"C:/Dokumente und Einstellungen/"+User+"/Desktop/IcoFX.lnk"'

Re: os.system() mit Variable?

Verfasst: Montag 9. September 2013, 10:20
von BlackJack
@s1l3nz: Du musst Dir klar machen mit welchem Begrenzungszeichen Deine literale Zeichenkette anfängt und aufhört und was die Zeichenkette damit tatsächlich enthält. `User` soll ja nicht so Zeichen für Zeichen Bestandteil der Zeichenkette sein, sondern das ist ein Name der *ausserhalb* einer literalen Zeichenkette stehen muss. Verwendest Du keinen Editor mit Syntaxhervorherbung? Da sollte sichtbar sein wo das Problem liegt.

Statt ``+`` würde man in Python auch eher Zeichenkettenformatierung mittels `format()`-Methode auf Zeichenketten verwenden um Werte in einer Zeichenkette hinein zu formatieren.

Re: os.system() mit Variable?

Verfasst: Mittwoch 18. September 2013, 06:36
von s1l3nz
Danke für deine Antwort.
Leider verstehe ich das immer noch nicht :-(
Die Ausgabe von getpass.getuser() ist doch ein String, oder?
Wie würdest du eine Pfadangabe in einer Variable speichern?
Was ist mit dem Leerzeichen?
Hilfe!

Re: os.system() mit Variable?

Verfasst: Mittwoch 18. September 2013, 07:41
von snafu
Nutze `subprocess.call()`, dann hast du das Problem mit den Leerzeichen nicht:

Code: Alles auswählen

import subprocess
subprocess.call(['C:/Dokumente und Einstellungen/Flo/Desktop/IcoFX.lnk'])
Argumente sollten hier immer als Liste übergeben werden. Wenn es nur ein einziges Argument ist (wie in deinem Fall), dann ist zwar auch die Übergabe eines Strings erlaubt, aber das sollte man sich IMHO gar nicht erst angewöhnen, damit man möglicherweise bei einer späteren Erhöhung der Argumente nicht wieder umdenken muss.

Re: os.system() mit Variable?

Verfasst: Mittwoch 18. September 2013, 07:56
von /me
snafu hat geschrieben:Nutze `subprocess.call()`, dann hast du das Problem mit den Leerzeichen nicht
Aus Flexibilitätsgründen könnte man dann noch weitere Bordmittel verwenden.

Code: Alles auswählen

import getpass
import os

userpath = os.path.expanduser('~')
username = getpass.getuser()
filename = os.path.join(userpath, username, 'Desktop', 'test.exe')
Edit: Analog zu Hans Rosenthal: "Den Usernamen haben wir leider doppelt, den müssen wir einmal abziehen.". Prosa: userpath reicht schon.

Re: os.system() mit Variable?

Verfasst: Donnerstag 19. September 2013, 08:52
von s1l3nz
Scheinbar funktioniert "subprocess.call()" aber nicht mit Links? (*.lnk)
Ich möchte unter anderem office 2010 produkte aus meinem Python Programm starten. diese liegen bei jedem benutzer als Link auf dem Desktop.

Wenn ich versuche einen Link so zu starten, bekomme ich immer eine "%1 ist keine gükltige win32 Anwendung" Fehlermeldung.

Re: os.system() mit Variable?

Verfasst: Donnerstag 19. September 2013, 09:09
von /me
s1l3nz hat geschrieben:Scheinbar funktioniert "subprocess.call()" aber nicht mit Links? (*.lnk)
Dann nimm os.startfile.

Re: os.system() mit Variable?

Verfasst: Montag 23. September 2013, 09:29
von mutetella
/me hat geschrieben:Analog zu Hans Rosenthal: "Den Usernamen haben wir leider doppelt, den müssen wir einmal abziehen."
:mrgreen: