Problem bei Batch-u. Texteditor

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
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

Hi!

Ich schreibe grad an nem kleinen Batch-u.Texteditor mit dem man dateien vom Dateityp *.batxt schreiben kann.
Diese sollen dann automatisch in *.bat umgewandelt und gleich ausgeführt werden. Wenn's klappt werde ich die
BATCH-Sprache noch zusätzlich um ein paar Befehle erweitern (Kombination Python-Batch).

Im Moment hänge ich aber daran, dass ich die *.batxt-Dateien gleich mit meinem Editor zu öffnen. Ich benutze dazu

Code: Alles auswählen

import sys
irgendwas=sys.argv[1]
Hier mein Skript:

Code: Alles auswählen

from tkinter import *
import sys

root=Tk()
def save():
    saver=text.get('1.0',END)
    root2=Tk()
    root2.title("Speichern...")
    eingabe=Entry(root2)
    eingabe.pack()
    try:
        eingabe.insert(END,sys.argv[1])
    except IndexError:
        pass
    def save2():
        savename=eingabe.get()+".batxt"
        file2=open(savename,"w")
        file2.write(saver)
        file2.close()
        root2.destroy()
    def break1():
        root2.destroy()
    cmdsave2=Button(root2, text="Speichern", command=save2)
    cmdsave2.pack()
    cmdbreak=Button(root2, text="Abbruch",command=break1)
    cmdbreak.pack()
    root2.mainloop()
root.title("Text-& Batcheditor")
text=Text(root)
text.pack()
try:
    file=open (sys.argv[1],"r")
    r=file.read()
    text.insert(END,r)
    file.close()
except IndexError:
    pass
cmdsave=Button(root,text="Speicheren",command=save)
cmdsave.pack()
root.mainloop()
Wenn ich das Skript normal starte läuft ja alles glatt.
Wenn ich aber parameter übergebe (anders geht's nicht zu testen wenn's noch keine *.exe ist) und nun unter anderem Namen abspeichern will kommt folgende Fehlermelung:

Code: Alles auswählen

Exception im Tkinter callback
Traceback (most recent call last):
   File "C:\Python31\lib\tkinter\__init__.py", line 1399, in __call__
      return self.func(*args)
   File "C:\Users\Martin\Desktop\Text-& Batcheditor.py", line 17, in save2
      file2=open(savename, "w")
IOError: [Errno 13] Permission denied: 'neuer_name.batxt'
Leider verstehe ich den genauen Grund dieser Fehlermeldung nicht. Kann mir jemand helfen?

Danke im Voraus M.B
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Du hast nicht das Recht, die Datei zu speichern oder im Zielverzeichnis eine neue Datei anzulegen.
https://www.xing.com/go/invite/18513630.6a91d4
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

Hab's verstanden aber wie kann ich das umgehen?
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Das ist wohl kein Problem mit Python sondern dem OS.
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

Kann ich das dann irgendwie mit dem os-Modul lösen
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

1) Hast du die Datei in die du schreiben willst vllt. schon von einem anderen Prozess geöffnet? Dann kommt nämlich der gleich Fehler

2) Wenn das OS sagt, du darfst da nicht schreiben, dann darfst du da nicht schreiben. Das hat nix mit Python zu tun, sondern mit den Rechten, die dein User hat.
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

zu 1) guck ich mir mal genauer an
zu 2) ich bin auf meinem laptop admin
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

M.B hat geschrieben:zu 2) ich bin auf meinem laptop admin
Du hast trotzdem nicht alle notwendigen Rechte, kann unter Windows Vista/7 durchaus sein.
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

aber das speichern funktioniert doch wenn ich direkt durch das programm starte! (keine parameter übergebe)
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Funktioniert hier bei mir. Schreib doch mal, wie Du Dein Skript mit und ohne Parameter startest.
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

Ich hab die Windows automatisch übergeben lassen.
Wenn man das Icon der Datei über das Icon des Progs drüberzieht passiert doch das gleiche wie wenn man das per cmd macht (Hab ich irgendwo gelesen),oder?
Und ohne params ganz einfach mit nem Doppelklick aufs Icon des progs.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Solche Details verrätst du dann mal ganz nebenbei? *g Lass dir doch einfach mal den Inhalt von "Eingabe" anzeigen - oder den Inhalt von sys.argv.

Ich gehe stark davon aus, dass da irgendwo Anführungsstriche drin sind. Und im Ernst: Sich ein Verhalten von Windows zu Nutze zu machen, das man selbst gar nicht genau kennt, finde ich schon ziemlich "problematisch" - besonders wenn man im Zusammenhang mit diesem Verhalten auf Fehler stößt und es im Forum nichtmal erwähnt.
Zuletzt geändert von Barabbas am Freitag 25. Juni 2010, 12:50, insgesamt 2-mal geändert.
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Ich glaube nicht, dass es an Anführungszeichen liegt, da wäre die Fehlermeldung ne andere.
Bau mal im Skript oben folgendes ein:

Code: Alles auswählen

import os
print(os.getcwd())
M.B
User
Beiträge: 12
Registriert: Sonntag 20. Juni 2010, 15:48

Danke!
Habs ausprobiert.
Wenn ich die Icon's übereinander ziehe springt Windows (oder Python?) automatisch ins Verzeichnis C:\Windows\system32.
Werd mal sehn wie ichs lösen kann - weiß ja jetzt den Fehler.
Antworten