os.system funktioniert nicht ordnungsgemäß

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
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

hi,
ich habe in python 3.3 versucht, die funktion os.system() für einen kommandozeilenbefehl auszuführen (dafür ist es ja da, oder?)...
leider hat das nicht so ganz funktioniert...
hier mein skript:

Code: Alles auswählen

import os
os.system('php C:\Programme\PHP\AdobeHDS.php --manifest "http://www.someURL.com/" --delete')
wenn ich genau den obigen befehl in der eingabeaufforderung manuell eingebe, funktioniert es, wenn ich aber das python script starte, öffnet sich die konsole und rattert in einem affentempo ständig meine eingabe runter - wobei "http://www.someURL.com/" (da hab ich halt ne URL stattdessen geschrieben) nicht mal richtig angezeigt wurde; stattdessen stand da:

C:\...Pfad zum Ordner des python scripts... > php C:\Programme\PHP\AdobeHDS.php --manifest "lol" --delete

wohingegen bei manueller eingabe in der eingabeaufforderung steht:

C:\Dokumente und Einstellungen\user> php C:\Programme\PHP\AdobeHDS.php --manifest "http://www.someURL.com/" --delete

falls mir jemand sagen kann, wie ich das anständig gebacken kriege, wäre ich sehr dankbar :P

PS: ich hab als laie nicht so viel ahnung, aber ich denke, es liegt daran dass im normalfall in der eingabeaufforderung der pfad zum eigenen user steht (C:\Dokumente und Einstellungen\user>), während im anderen fall der pfad zum ordner, in dem das pythonscript ist, steht^^

wenn jemand weiß, wie ich diesen "startpfad" (wofür auch immer der sein mag xD) ändern kann, könnte es vllt auch helfen :)
BlackJack

@Meeper: Sag mal warum fragst Du eigentlich womit man externe Programme startet um die Antwort dann doch zu ignorieren? Vergiss bitte `os.system()` und verwende das `subprocess`-Modul. Und da dann auf keinen Fall die Option ``shell=True`` denn dann macht es nicht viel Sinn das richtige Modul zu verwenden.

Das was Du da behauptest was angeblich bei `os.system()` passiert, kann übrigens eigentlich gar nicht sein. Aus "http://www.someURL.com/" kann nicht einfach so "lol" werden.
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

ich habe das mit dem subprocess probiert, und kam leider zum gleichen ergebnis :/
allerdings hast du recht, ich hatte nirgends im script oder sonst wo "lol" zu stehen, trotzdem stand es da - ich führe das einfach darauf zurück, dass mein rechner in letzter zeit spinnt :/

ich schätze auch, dass daher der fehler kommt, und versuch jetzt einfach mal, ihn neu zu starten; mal sehen ob sich was tut ;)

danke übrigens für deine hilfe! ich hab sie nicht ignoriert, ich habe nur *erfolglos* damit rumprobiert ;)

da mittlerweile nicht mal mehr eine normale batch-datei irgendwie funktioniert, muss es wohl an meinem rechner liegen^^ wie gesagt macht der in letzter zeit macken :(

gruß, Meeper
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würd den ja mal auf Viren / Trojaner überprüfen lassen...
Meeper
User
Beiträge: 15
Registriert: Donnerstag 14. Februar 2013, 17:41

danke an euch beide,
und @ snafu ja, ich bin schon seit einigen wochen dabei aber er scheint nichts an malware zu finden... egal was ich ausprobiere.
nur die fehlermeldungen kommen regelmäßig ^_^'
ich denke ich muss mir einfach mal neue hardware zulegen, mein laptop ist schon uralt^^

ich habe das ganze jetzt übrigens gelöst, indem ich den befehl in eine batch datei geschrieben hab, und jeweils mit dem pythonscript die URL darin entsprechend abgeändert habe.
Das hat bei mir vorher dasselbe ergebnis geliefert wie oben beschrieben, aber es hat dann funktioniert nachdem ich in die nächste zeile der batch datei EXIT geschrieben hab^^
ja, ich weiß, isn dilettantischer anfängerfehler...

hier nochmal der fertige quellcode (mit gui; das war ja das ziel :D es sich bequemer zu machen... xD):

Code: Alles auswählen

#downloadscript für .f4f-stream über AdobeHDS.php

from tkinter import *
import subprocess

class gui:
    def __init__(self):
        
        self.fenster = Tk()

        self.l1 = Label(self.fenster, text="URL: ")
        self.l1.grid(row=0, column=0)
        
        self.entry1 = Entry(self.fenster)
        self.entry1.grid(row=0, column=1)
        
        self.b1=Button(self.fenster, text="Start", command=self.AdobeHDS)
        self.b1.grid(row=0, column=2)
        
    def AdobeHDS(self):
        file=open("C:\Dokumente und Einstellungen\username\tralala.bat", "w")
        file.write('php C:\Programme\PHP\AdobeHDS.php --manifest "'+ self.entry1.get() + '" --delete\n EXIT')
        file.close()
        subprocess.call("C:\Dokumente und Einstellungen\username\tralala.bat", shell=False)
        exit()

if __name__=="__main__":
    g=gui()
    mainloop()
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst also mit dem Programm Deine Festplatte formatieren.
Es ist reichlich gefährlich, in eine Batch Datei Daten einzutragen, die der Nutzer frei vergeben
darf. Der kann dann nämlich jeden beliebigen Befehl ausführen, statt dass er nur eine
URL eingeben darf.
Ich mag zwar keine Musterlösungen präsentieren, aber bevor noch katastrophale Dinge passieren ...

Code: Alles auswählen

PHP_PROGRAM = r"C:\Programme\PHP\php.exe"
HDS_SKRIPT = r"C:\Programme\PHP\AdobeHDS.php"

url = self.entry1.get()
subprocess.Popen([PHP_PROGRAM, HDS_SKRIPT, "--manifest",url, "--delete"]).wait()
Grüße
Sirius
Antworten