os.system() mit Variable?

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
s1l3nz
User
Beiträge: 4
Registriert: Sonntag 23. Juni 2013, 20:09

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"'
Zuletzt geändert von Anonymous am Montag 9. September 2013, 10:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
s1l3nz
User
Beiträge: 4
Registriert: Sonntag 23. Juni 2013, 20:09

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!
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Zuletzt geändert von /me am Donnerstag 19. September 2013, 09:10, insgesamt 1-mal geändert.
s1l3nz
User
Beiträge: 4
Registriert: Sonntag 23. Juni 2013, 20:09

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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

s1l3nz hat geschrieben:Scheinbar funktioniert "subprocess.call()" aber nicht mit Links? (*.lnk)
Dann nimm os.startfile.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

/me hat geschrieben:Analog zu Hans Rosenthal: "Den Usernamen haben wir leider doppelt, den müssen wir einmal abziehen."
:mrgreen:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten