Problem mit os.spawnv

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
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Hallo,

ich möchte unter Windows von einem Programm aus ein neues unabhänig von dem alten mit einem Parameter starten. Ich habe mal in os nachgeschaut und os.spawnv gefunden. Leider funktioniert es einfach nicht.

Code: Alles auswählen

import os

path='D:\\ordner1\\Editor.pyw'
file=u'D:\\ordner2\\wm-gruppenregeln.txt'
os.spawnv(os.P_NOWAIT,path,[file])
Wenn ich das ausführe, bekomme ich immer einen Error:

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\bwinf\2.runde\nr1\losgehts.pyw", line 228, in new
    self.open()
  File "D:\bwinf\2.runde\nr1\losgehts.pyw", line 243, in open
    self.open_file(path)
  File "D:\bwinf\2.runde\nr1\losgehts.pyw", line 257, in open_file
    os.spawnv(os.P_WAIT,path,[file])
OSError: [Errno 8] Exec format error
Kann mir jemand sagen, was ich falsch gemacht habe, und vorallem, wie ich es behebe???

Danke schon einmal im voraus

mfg
cime
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

pyw ist eine Pythondatei, und keine EXE
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Joghurt hat geschrieben:pyw ist eine Pythondatei, und keine EXE
ich weiß, aber unter Windows wird doch normalerweise, wenn man kein exe angibt, das zugehörige Programm (also hier halt pythonw.exe) gestartet

Wüsste trotzdem jemand, wie ich das realisieren kann, ohne erst die pythonw.exe aufzurufen bzw. falls es so nicht geht, wie ich den Ort der pythonw.exe herausbekomme?????
Zuletzt geändert von cime am Donnerstag 13. April 2006, 15:25, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich hätte ja eher os.startfile() genutzt, aber naja.

Und den Python-Pfad kriegst du so.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Leonidas hat geschrieben:Ich hätte ja eher os.startfile() genutzt, aber naja.
ich auch, aber da bekomme ich einen Fehler, dass er die Datei nicht finden kann ... aber vielleicht weiß ja jemand was falsch an ... ist (ich nämlich leider nicht):

Code: Alles auswählen

os.startfile("%s %s"%(path,file))
Leonidas hat geschrieben: Und den Python-Pfad kriegst du so.
Danke, wenn keiner etwas einfacheres weiß, mach ich es halt so
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Ich würde auch, wie Leonidas gesagt hat, os.startfile(file) benutzen.

Code: Alles auswählen

from os import startfile
startfile(Programm, das gestartet werden soll)
mfg

Thomas :-)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Warum sollte das nicht gehen?

Code: Alles auswählen

from os import startfile
startfile('C:\\Windows\\system32\\regedt32.exe')
mfg

Thomas :-)
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Code: Alles auswählen

import os
path='D:\\ordner1\\Editor.pyw'
file=u'D:\\ordner2\\wm-gruppenregeln.txt'
os.startfile(path,file)
führt zu

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\bwinf\2.runde\nr1\test.py", line 7, in ?
    os.startfile(path,file)
TypeError: startfile() takes exactly 1 argument (2 given)
----------------------------

Code: Alles auswählen

import os
path='D:\\ordner1\\Editor.pyw'
file=u'D:\\ordner2\\wm-gruppenregeln.txt'
os.startfile("%s %s"%(path,file))
führt zu

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\bwinf\2.runde\nr1\test.py", line 8, in ?
    os.startfile("%s %s"%(path,file))
WindowsError: [Errno 2] Das System kann die angegebene Datei nicht finden: 'D:\\ordner1\\Editor.pyw D:\\ordner2\\wm-gruppenregeln.txt'
Daher weiß ich nicht, was ich sonst machen soll ....
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Also ich versteh nicht ganz, wozu das Path in deinem Code gut sein soll, aber im ersten Code ist es so, das os.startfile nur 1 Argument annimmt und zwar den pfad und die Datei!Du übergibst ihm aber Pfad als 1 Argument und Das File als 1 Argument!

Auserdem willst du 2 Datein in deinem Code, öffnen, das versteh ich net ganz! :?

Was ist an meinem Code falsch, bzw was macht er nicht, was du willst?

Wenn du 2 Files starte willst, dann nimm einfach 2x os.startfile!
mfg

Thomas :-)
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Python Master 47 hat geschrieben:Also ich versteh nicht ganz, wozu das Path in deinem Code gut sein soll, aber im ersten Code ist es so, das os.startfile nur 1 Argument annimmt und zwar den pfad und die Datei!Du übergibst ihm aber Pfad als 1 Argument und Das File als 1 Argument!
ja, das habe ich auch mitbekommen, ich habe das auch nur hingeschrieben als Antwort auf
Python Master 47 hat geschrieben:Ich würde auch, wie Leonidas gesagt hat, os.startfile(file) benutzen.

Code: Alles auswählen

from os import startfile
startfile(Programm, das gestartet werden soll)
Python Master 47 hat geschrieben: Auserdem willst du 2 Datein in deinem Code, öffnen, das versteh ich net ganz! :?

Was ist an meinem Code falsch, bzw was macht er nicht, was du willst?

Wenn du 2 Files starte willst, dann nimm einfach 2x os.startfile!
Antwort:
cime hat geschrieben: ich möchte unter Windows von einem Programm aus ein neues unabhänig von dem alten mit einem Parameter starten.
path ist also das Programm und file der Parameter, den ich übergeben möchte (Entschuldigung, ich habe gedacht, dass ist offensichtlich, war wohl mal wieder mit meinen Gedanken voraus) ...

mfg
cime
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Antwort:
cime hat geschrieben: ich möchte unter Windows von einem Programm aus ein neues unabhänig von dem alten mit einem Parameter starten.
Tut mir Leid, aber ich steh gerade voll auf dem Schlauch, kannst du mir das nochmal erklären, wenn ich dein Problem versteh kann ich dir auch helfen! :?
mfg

Thomas :-)
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Python Master 47 hat geschrieben:Antwort:
cime hat geschrieben: ich möchte unter Windows von einem Programm aus ein neues unabhänig von dem alten mit einem Parameter starten.
Tut mir Leid, aber ich steh gerade voll auf dem Schlauch, kannst du mir das nochmal erklären, wenn ich dein Problem versteh kann ich dir auch helfen! :?
ganz ausführlich:
Ich habe ein Programm in dem ich unter anderem txt-Dateien verarbeite. Falls eine solche txt-Datei aber nicht den korrekten Aufbau hat, kann der User sie in dem von mir extra dafür geschriebenen Editor bearbeiten.
Dafür muss ich aber den Editor aufrufen und ihm einen Parameter (den Namen, der Datei, die bearbeitet werden soll) übergeben.
Und genau diesen Teil versuche ich gerade irgendwie zu realisieren und komme aber nicht weiter.

mfg
cime
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Achso ok jetzt hab ich es verstanden! :P

Wie wäre es mit:

Code: Alles auswählen

from os import startfile
startfile('C:\\blub.txt')
Also du startest also deine txt file, das bearbeitet werden soll, bei mir heißt es blub.txt!Diese datei wird dann automatisch mit dem Text Editor gestartet!
Bei mir ist die .txt datei direkt auf C:\, das kann bei dir wieder anders sein, je nachdem wo die .txt datei liegt, änderst du den Pfad!

Ist das das was du willst?
mfg

Thomas :-)
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Python Master 47 hat geschrieben:Achso ok jetzt hab ich es verstanden! :P

Wie wäre es mit:

Code: Alles auswählen

from os import startfile
startfile('C:\\blub.txt')
Also du startest also deine txt file, das bearbeitet werden soll, bei mir heißt es blub.txt!Diese datei wird dann automatisch mit dem Text Editor gestartet!
Bei mir ist die .txt datei direkt auf C:\, das kann bei dir wieder anders sein, je nachdem wo die .txt datei liegt, änderst du den Pfad!

Ist das das was du willst?
nein, das weiß ich auch, ich hätte die Datei gerne in meinem Editor geöffnet ... (da ich in diesem dann noch ein Paar spezielle Funktionen hinzufügen möchte, die genau für diese Arten von Dateien nützlich ist) ..

mfg
cime
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Das geht schlecht, weil eine .txt Datei standardmäßig mit dem Texteditor geöffnet wird!Und wie du jetzt deinen Editor öffnen kannst und dem Editor dann sagst, das er diese Datei öffnet weiß ich nicht!

Das einzige was mir noch einfallen würde wäre folgendes:

Du gehst auf die .txt Datei und gehst dann auf öffnen mit, dann wählst du deinen Editor aus und setzt einen Hacken bei Dateityp immer mit dem ausgewählten Programm öffnen!
mfg

Thomas :-)
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Hi,

wenn du weisst, mit welchem Editor du die Datei öffnen willst und du auch weisst, wo die Editor-Exe liegt, brauchste nur die Textdatei als Argumente übergeben. Das sollte bei den meisten Texteditoren gehen.

Mfg,

Kolazomai
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

Kolazomai hat geschrieben:Hi,

wenn du weisst, mit welchem Editor du die Datei öffnen willst und du auch weisst, wo die Editor-Exe liegt, brauchste nur die Textdatei als Argumente übergeben. Das sollte bei den meisten Texteditoren gehen.

Mfg,

Kolazomai
ja, das weiß ich auch. Aber um genau zu sein habe ich den Editor ja selbst geschrieben und es ist keine exe sondern ein pyw, der man aber auch einfach nur den Parameter übergeben muss, da ich im Editor sys.argv[1] auslese .... nur ich weiß eben nicht, wie ich das korrekt übergebe ...
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

@Kolazomai
Wenn du sowas schon sagst, dann wäre es auch praktisch, wenn du ihm gleich ein Beispiel Code gibst!
mfg

Thomas :-)
cime
User
Beiträge: 152
Registriert: Dienstag 24. Mai 2005, 15:49

so, da es ja nicht anders geht, hier eine Lsg.:

Code: Alles auswählen

import os,sys

os.spawnv(os.P_NOWAIT,sys.executable,[sys.executable,path,file])
Antworten