python über cron macht probleme

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
liberavia
User
Beiträge: 19
Registriert: Donnerstag 28. August 2008, 12:27

Dienstag 7. April 2009, 11:47

Folgende Fehlermeldung erhalte ich, wenn ich mein Python-Script über cron starte:

Code: Alles auswählen

/bin/sh: /data/home/technik/syncbase/ta_syncbase.py: /usr/bin/python^M: bad interpreter: No such file or directory
Startet man das Script als user auf dem Server, gibts da keine Probleme. Das ^M macht mir ein wenig sorgen. Das Script ist als UTF-8 gespeichert. Das ist auch nötig, da ich in einer Funktion eine ganze Batterie an Sonderzeichen umwandle.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import gdata.base.service
import gdata.service
try:
    from xml.etree import ElementTree 
except ImportError:
    from elementtree import ElementTree 
import atom 
import gdata.base
import getpass
import MySQLdb
import time
import datetime
from ConfigParser import ConfigParser

def special_chars(zeile):
	text = zeile.replace("ä", "a")
	text = text.replace("Ä", "A")
	text = text.replace("ö", "o")
	text = text.replace("Ö", "ö")
	text = text.replace("ü", "u")
	text = text.replace("Ü", "ü")
	text = text.replace("ß", "ss")
	text = text.replace("é", "e")
	text = text.replace("°", "")
	text = text.replace("ą", "")
	text = text.replace("ć", "")
	text = text.replace("ę", "")
	text = text.replace("ł", "")
	text = text.replace("ń", "")
	text = text.replace("ó", "")
	text = text.replace("ś", "")
	text = text.replace("ż", "")
	text = text.replace("Ą", "")
	text = text.replace(" ", "-")
	text = text.replace("/", "-")
	text = text.replace("(", "-")
	text = text.replace(")", "-")
	text = text.replace(".", "-")
	text = text.replace(",", "-")
	text = text.replace(":", "-")
	text = text.replace("+", "-")
	text = text.replace('"', "")
	text = text.replace("'", "")
	text = text.replace("?", "")
	text = text.replace("%", "")
	text = text.replace("!", "")
	text = text.replace(";", "")
	text = text.replace("@", "")
	text = text.replace("#", "")
	text = text.replace("$", "")
	text = text.replace("^", "")
	text = text.replace("&", "")
	text = text.replace("{", "")
	text = text.replace("}", "")
	text = text.replace("[", "")
	text = text.replace("]", "")
	text = text.replace("\\", "")
	text = text.replace("|", "")
	text = text.replace("™", "")
	text = text.replace("®", "")
	text = text.replace("©", "")
	text = text.replace("€", "")
	text = text.replace("`", "")
	text = text.replace("_", "")
	return text
Hat jemand einen Tipp für mich?

Dank im Voraus
Die Entscheidung zwischen OpenSource- und proprietärer Software ist die Entscheidung zwischen Evolution und Marketing.
Welches dieser Prinzipien ist Deiner Meinung nach bewährter und nachhaltiger?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 7. April 2009, 11:53

Du solltest dein Skript auf Unix-Zeilenenden umstellen, das ^M kommt von den DOS-Zeilenenden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
liberavia
User
Beiträge: 19
Registriert: Donnerstag 28. August 2008, 12:27

Dienstag 7. April 2009, 12:03

Und wie mache ich das?

Habe das Script mit gedit geschrieben.

Danke
Die Entscheidung zwischen OpenSource- und proprietärer Software ist die Entscheidung zwischen Evolution und Marketing.
Welches dieser Prinzipien ist Deiner Meinung nach bewährter und nachhaltiger?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Dienstag 7. April 2009, 12:05

Installiere dos2unix
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 7. April 2009, 15:25

Und die Funktion special_chars() würde ich eher über ein dict oder ein Tupel lösen.

Code: Alles auswählen

SPECIAL_CHARS = {
    "ä": "a",
    ...
}
def handle_special_chars(line):
    new_line = []
    for c in zeile:
        if c in SPECIAL_CHARS:
            new_line.append(SPECIAL_CHARS[c])
        else:
            new_line.append(c)
    return "".join(new_line)
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Dienstag 7. April 2009, 16:25

@Hyperion Das meinst du nicht ernst oder?

Code: Alles auswählen

#!/usr/bin/env python
# encoding: utf-8

special_chars = {u'ä': u'a',
                 u'ö': u'o',
                 u'ü': u'u',
                 }

def handle_special_chars(line):
    return u''.join(special_chars.get(c, c) for c in line)

print handle_special_chars(u'äöü')
liberavia
User
Beiträge: 19
Registriert: Donnerstag 28. August 2008, 12:27

Dienstag 7. April 2009, 16:37

Vielen Dank

Das hat das Problem gelöst !

Musste zwar meine Sonderzeichen nochmal einfügen aber nun läuft der cron.

Es ist sehr beruhigend dieses Forum zu kennen ;)

Gruß
Die Entscheidung zwischen OpenSource- und proprietärer Software ist die Entscheidung zwischen Evolution und Marketing.
Welches dieser Prinzipien ist Deiner Meinung nach bewährter und nachhaltiger?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 7. April 2009, 20:34

DasIch hat geschrieben:@Hyperion Das meinst du nicht ernst oder?
Klar :-P
Ok, Da war Platz für Optimierungen ... ;-)
scrippi
User
Beiträge: 31
Registriert: Montag 6. April 2009, 10:37

Freitag 10. April 2009, 18:36

bei solchen problem hilts auch ganz oft mal die datei mit VI oder MCEDIT zu öffnen und per hand das "^" am ende der ersten zeile wegzumachen


lg scrippi
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 10. April 2009, 18:41

Bei vim kann man auch einfach ``:set ff=unix`` machen, da muss man nicht jede Zeile einzeln durchgehen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten