Seite 1 von 1

python über cron macht probleme

Verfasst: Dienstag 7. April 2009, 11:47
von liberavia
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

Verfasst: Dienstag 7. April 2009, 11:53
von Leonidas
Du solltest dein Skript auf Unix-Zeilenenden umstellen, das ^M kommt von den DOS-Zeilenenden.

Verfasst: Dienstag 7. April 2009, 12:03
von liberavia
Und wie mache ich das?

Habe das Script mit gedit geschrieben.

Danke

Verfasst: Dienstag 7. April 2009, 12:05
von derdon
Installiere dos2unix

Verfasst: Dienstag 7. April 2009, 15:25
von Hyperion
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)

Verfasst: Dienstag 7. April 2009, 16:25
von DasIch
@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'äöü')

Verfasst: Dienstag 7. April 2009, 16:37
von liberavia
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ß

Verfasst: Dienstag 7. April 2009, 20:34
von Hyperion
DasIch hat geschrieben:@Hyperion Das meinst du nicht ernst oder?
Klar :-P
Ok, Da war Platz für Optimierungen ... ;-)

Verfasst: Freitag 10. April 2009, 18:36
von scrippi
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

Verfasst: Freitag 10. April 2009, 18:41
von Leonidas
Bei vim kann man auch einfach ``:set ff=unix`` machen, da muss man nicht jede Zeile einzeln durchgehen.