python fehlermeldung typeerror

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.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

neeeee
ich sag ja erst ab while das es tarfile-Variable gibt
ich komm auch auf den Ordner drauf aber ich steh immer im Ordner Sicherungen und nicht in der Tar also ich sehe alle angezeigten Dateien nur ich steh net in der Datei selbst
\\Pfad\zu\Sicherung\datei2.gz datei1.gz
will aber in den datei2.gz sofort drin sein ohne anzuklicken verstehst du was ich meine?
BlackJack

Nein ich verstehe nicht was Du meinst. Das Deine Beiträge unverständlich sind, ist ja aber nichts neues. Deine ”Sätze” sind einfach unverständlich.

Das „neeeee” ist grundsätzlich verständlich, aber ich weiss nicht worauf genau sich das bezieht.

Den zweiten ”Satz” verstehe ich nicht.

„In der Datei stehen” meint wahrscheinlich, dass Du im 7z-Dateimanager nicht den Inhalt des Archivs angezeigt bekommst. Was bei den Argumenten, die Du übergibst, auch nicht weiter verwunderlich ist.

Was soll ``\\Pfad\zu\Sicherung\datei2.gz datei1.gz`` sein? Das ist nicht das was Du als Argumente übergibst. Du übergibst *drei* Argumente, hier sind es nur zwei. Und wenn Du den Inhalt von ``datei2.gz`` angezeigt bekommen möchtest, was soll die Übergabe von ``datei1.gz`` als Argument bewirken? Zumal hier die Dateiendung in dem Beispiel nicht mit dem übereinstimmt, was Du tatsächlich übergibst.
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Hier versteht wohl keiner so richtig, was Du meinst! Wieso denn jetzt klicken? Arbeitest du mit einer GUI?

Mal als Denkanstoss

Code: Alles auswählen

# coding: utf-8

import fnmatch
import os

def main():
    BACKUP_DIR = os.path.join('/MY', 'BACKUP', 'DIR')
    # eigentlich geht das mit Blackjacks Vorschlag, den du ja
    # sicherlich gelesen hast, so:
    # oldest_file = min(fnmatch.filter(os.listdir(BACKUP_DIR), '*.tar.gz'))
    my_backup_files = [
            '20110704-115500.tar.gz', 
            '20110704-115450.tar.gz',
            '20110704-115630.tar.gz'
        ]
    oldest_file = min(my_backup_files)
    print os.path.join(BACKUP_DIR, oldest_file)

    # den subprocess.Popen richtig hinzubekommen, überlasse ich dir ...

if __name__ == '__main__':
    main()
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

:evil:

Code: Alles auswählen

# imports
# -*- coding: utf-8-*-
import cStringIO
import os
import os.path
import platform
import sys
import subprocess
import re
config_file = 'dp_clienttask.ini'
file = open(config_file)
for line in file.readlines():
	if line.lower().strip().startswith("boottime"):
		choice = re.split('^boottime\s*=\s*([0-9]+)', line.lower().strip())[1]
	elif line.lower().strip().startswith("destination="):
		dest = re.split('^[dD][eE][sS][tT][iI][nN][aA][tT][iI][oO][nN]\s*=\s*(.+)\s*$', line.lower().strip())[1]
		file.close()  
class Lock():
    if 'linux' in platform.system().lower():
        # checks for lock
        def check(self):
            if os.path.exists(os.path.join(os.path.abspath(__file__), 'dp_backup.lock')):
                try:
                    file = open(os.path.join(os.path.abspath(__file__), 'dp_backup.lock'))
                    pid = int(file.readline().strip())
                    file.close()
                    if os.path.exists('/proc/%s/' % str(pid)):
                        file = open('/proc/%s/cmdline' % str(pid))
                        line = file.readline().strip()
                        file.close()
                        if line.startswith('python'):
                            print >> sys.stderr, 'Warning: Process %s already running. Quitting.' % str(pid)
                            exit(0)
                except Exception, e:
                    print e
    elif 'windows' in platform.system().lower():
        # checks for lock
        def check(self):
            if os.path.exists(os.path.join(os.path.abspath(__file__), 'dp_backup.lock')):
                try:
                    file = open(os.path.join(os.path.abspath(__file__), 'dp_backup.lock'))
                    pid = int(file.readline().strip())
                    file.close()
                    try:
                        os.kill(pid, 0)
                        # TODO: check whether pid is a running instance of python
                        print >> sys.stderr, 'Warning: Process %s already running. Quitting.' % str(pid)
                        exit(0)
                    except OSError, e:
                        pass # process is not running
                except Exception, e:
                    print e

class Backup():
    def __init__(self, lock,  config_file):
        self.mac = None
        file = None
        if 'linux' in platform.system().lower():
            try:
                for i in os.listdir('/sys/class/net/'):
                    if self.mac != None:
                        break
                    if not i.startswith('eth'):
                        continue
                    file = open('/sys/class/net/%s/operstate' % i)
                    try:
                        if 'up' in file.read():
                            file.close()
                            file = open('/sys/class/net/%s/address' % i)
                            self.mac = file.readline().strip().replace(':','-')
                            file.close()
                    except:
                        pass
                    finally:
                        if file != None and not file.closed:
                            file.close()
            except:
                pass
            if self.mac == None:
                try:
                    for i in os.listdir('/sys/class/net/'):
                        if self.mac != None:
                            break
                        if not i.startswith('eth'):
                            continue
                        try:
                            file = open('/sys/class/net/%s/address' % i)
                            self.mac = file.readline().strip().replace(':','-')
                            file.close()
                        except:
                            pass
                        finally:
                            if file != None and not file.closed:
                                file.close()
                except:
                    pass
        elif 'windows' in platform.system().lower():
            for line in os.popen(r"C:\WINDOWS\system32\ipconfig.exe /all"):
                match = re.search('((?:[0-9A-Fa-f]{2}-){5}[0-9A-Fa-f]{2})', line)
                if match != None:
                    self.mac = match.group()
                    break
        if self.mac == None:
            print >> sys.stderr, '''ERROR: Coulnd't retrieve MAC-address!'''
            exit(1)

        self.current_archive = None 
	file=open("file.txt","w")
	file.write(dest)
	file.write('\\')
	file.write(self.mac)
	file.close()
		
		
i=0
#while i < len(files):
 #   if not os.path.isfile(file[i]) or not files[i].endswith('tar.gz'):
  #      files.pop(i)
   #     i+=1
    #    files.sort()
     #   tar_file=files[-1] 	
       # print tar_file		
      #  previewfile = subprocess.Popen(["C:\\Programme\\7-Zip\\7zFM.exe",dest , tar_file])#, tar_file.replace('.tar.gz', '.tar')]) 


Need my Macadress and the path to the file-folder do you understand me?...
ich brauch dazu die mac-adresse und den Pfad zum Ordner dann die Sicherungstar und dann die gepackten Dateien.
soll ichs euch aufmalen?

~> path\mac\ordner\sicherung.tar.gz\\path\mac\ordner\sicheung.tar
das is alles was ich will.
please close my thread
es is einfach sinnlos hier zu erklären was ich erreichen möchte.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

bluelagoon hat geschrieben:es is einfach sinnlos hier zu erklären was ich erreichen möchte.
Du hast es doch noch nicht einmal versucht ;-) Du schreibst viele zusammenhangslose Texte in denen auf einmal aus dem Kontext gerissene oder vollkommen unbekannte Dinge auftauchen. Wie zum Beispiel deine GUI. Versuche dein Problem doch mal in klare, logische strukturierte Sätze zu packen, welche dein Problem beschreiben, was du für ein Ergebnis erwartetst und welchen Fehler du bekommst. Und dazu noch ein Minimalbeispiel, in welches man sich nicht erst 15 Minuten einliest, dein Problem allerdings reproduziert. Ich würde zum Beispiel bei deinem Code erstmal anfangen die ganzen leeren, fehlerverschlingenden excepts zu entfernen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Man kann deinen Code nicht gerade gut lesen. Du verzichtest auf Kommentare und arbeitest umständlich.

Ich greife mal ein Beispiel heraus.
bluelagoon hat geschrieben:

Code: Alles auswählen

import re
config_file = 'dp_clienttask.ini'
file = open(config_file)
for line in file.readlines():
	if line.lower().strip().startswith("boottime"):
		choice = re.split('^boottime\s*=\s*([0-9]+)', line.lower().strip())[1]
	elif line.lower().strip().startswith("destination="):
		dest = re.split('^[dD][eE][sS][tT][iI][nN][aA][tT][iI][oO][nN]\s*=\s*(.+)\s*$', line.lower().strip())[1]
		file.close()
Hier überschreibst du das Builtin file. Zudem erfolgt das Schließen der Datei zu einem sehr merkwürdigen Zeitpunkt. Dann verwendest du innerhalb der Schleife immer line.lower().strip(), statt direkt mit dem passenden Wert durch die Schleife zu laufen. Wofür dann bei dem Pattern im regulären Ausdruck Großbuchstaben eingesetzt werden will sich einem nicht wirklich erschließen.

Code: Alles auswählen

import re
from itertools import imap
config_file = 'dp_clienttask.ini'
with open(config_file) as f:
    for line in imap(str.strip, imap(str.lower, f)):
        if line.startswith('boottime'):
            choice = re.split('^boottime\s*=\s*([0-9]+)', line)[1]
        elif line.startswith('destination='):
            dest = re.split('^destination\s*=\s*(.+)\s*$', line)[1]
Dieser Code ist schon mal besser und logischer, auch wenn sicherlich noch Optimierungspotenzial (z.B. in Richtung Fehlerbehandlung) drin ist.

Deine Fragen und Erklärungen hier im Forum sind jetzt leider ähnlich wüst wie dein Programmierstil. Aus dem Zusammenhang gerissen, ohne sauberes Konzept dahinter - kurz gesagt größtenteils unverständlich. Wir würden ja gerne sinnvoll helfen, aber du schaffst es einfach nicht, eine für uns verständliche Frage zu formulieren.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

dest =\\path\to\
und die schleife:
if 'windows' in platform.system().lower():
for line in os.popen(r"C:\WINDOWS\system32\ipconfig.exe /all"):
match = re.search('((?:[0-9A-Fa-f]{2}-){5}[0-9A-Fa-f]{2})', line)
die Macadresse sprich

dest, line, tarfile sind für subprocess wichtig die tarfile kann ich nur rausfinden WENN ich den richtigen Pfad zur Sicherung habe nur ich hab grad Probleme mit Macadresse und die Tarfile Sortierung das die zuletzt! erstellte Datei verwendet wird.
Nun verstanden?
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

bluelagoon hat geschrieben: Nun verstanden?
Ne. Am besten schon mal mehr Satzzeichen zur Untergliederung und python tags.
BlackJack

@bluelagoon: Da ist schon wieder ein Text der wohl aus mehreren aneinander gehängten Sätzen, aber ohne Satzzeichen besteht. Den will ich gar nicht erst lesen, auch wenn ich vielleicht mit Mühe ein paar Teile davon verstehe.

Denn selbst wenn man die Frage halbwegs versteht, oder zumindest erahnen kann, dann verstehst Du die Antworten anscheinend nicht, oder Du ignorierst sie willentlich. Das was /me zu dem Quelltextabschnitt gesagt hat, haben andere in der Vergangenheit nämlich auch schon einmal gesagt. Wozu gibt man Dir Hinweise, wenn Du Die sowieso komplett ignorierst.

Wie man den Namen der aktuellsten Sicherungskopie ermittelt, wurde hier schon verraten. Ich habe die Funktionen genannt, und jemand anders hat die sogar schon für Dich in einem passenden Ausdruck zusammen gesetzt. Trotzdem steht da immer noch die auskommentierte ``while``-Schleife in Deinem Quelltext, bei der man sich fragt, ob Du überhaupt eine Vorstellung davon hast, wie der Code ausgeführt wird.

Es gibt übrigens nicht *die* Mac-Adresse eines Rechners. Es könnten mehrere Netzwerkkarten verbaut sein, oder auch virtuelle Karten existieren, wenn man zum Beispiel virtuelle Maschinen auf einem Rechner laufen lässt.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Naja danke frabron für das Codestück hat mir schon weitergeholfen mal sehn ob ichs schaff bis denn.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Ne, ich hab nun ne viel bessere und einfachere Lösung!
Ich lass den Backup-Pfad Verzeichnis+Namen in eine Text-Datei schreiben, lese die Datei aus und übergib es dem Subprocess.
Warum schwer machen, wenns doch viel einfacher geht.
Vielen Dank für die Hilfe.
Antworten