Random "pythonw.exe hat aufgehört zu arbeiten" Absturz
SO,
Den code in der Frage ist die folgende, allerdings kann es zufällig passieren, auf andere Skripte zu (ich glaube nicht, der Fehler liegt im code)
Aus irgendeinem Grund, völlig zufällig, es manchmal abstürzt und öffnet sich, "pythonw.exe hat aufgehört zu arbeiten", könnte es sein, nach 5 Stunden, 24 Stunden oder 5 Tage... ich kann nicht herausfinden, warum es zum Absturz zu bringen.
from datetime import date, timedelta
from sched import scheduler
from time import time, sleep, strftime
import random
import traceback
s = scheduler(time, sleep)
random.seed()
def periodically(runtime, intsmall, intlarge, function):
currenttime = strftime('%H:%M:%S')
with open('eod.txt') as o:
eod = o.read().strip()
if eod == "1":
EOD_T = True
else:
EOD_T = False
while currenttime >= '23:40:00' and currenttime <= '23:59:59' or currenttime >= '00:00:00' and currenttime <= '11:30:00' or EOD_T:
if currenttime >= '23:50:00' and currenttime <= '23:59:59':
EOD_T = False
currenttime = strftime('%H:%M:%S')
print currenttime, "Idling..."
sleep(10)
open("tca.txt", 'w').close
open("tca.txt", 'w').close
runtime += random.randrange(intsmall, intlarge)
s.enter(runtime, 1, function, ())
s.run()
def execute_subscripts():
st = time()
print "Running..."
try:
with open('main.csv'):
CSVFile = True
except IOError:
CSVFile = False
with open('eod.txt') as eod:
eod = eod.read().strip()
if eod == "1":
EOD_T = True
else:
EOD_T = False
if CSVFile and not EOD_T:
errors = open('ERROR(S).txt', 'a')
try:
execfile("SUBSCRIPTS/test.py", {})
except Exception:
errors.write(traceback.format_exc() + '\n')
errors.write("\n\n")
errors.close()
print """ %.3f seconds""" % (time() - st)
while True:
periodically(15, -10, +50, execute_subscripts)
Weiß jemand, wie ich herausfinden kann warum es abstürzt oder wissen warum und kennen einen Weg, um es zu beheben?
Dank
- Hyflex
- Durch die Art und Weise, genau, welche version von Python 2.7 benutzt du? Und wenn Sie können, versuchen Sie, auf die jeweils neueste freigegebene version.
- Ich bin mit version 2.7.5
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weiß ich nicht, aber es kann in Bezug auf die zwei Linien, die dies tun:
Diejenigen, die nicht tun, was Sie wollen, Sie zu tun: Sie lassen die Datei geöffnet ist. Sie müssen nennen wird die close-Methode (nicht nur abrufen):
Wahrscheinlich aber ist es nicht. CPython wird automatisch die Datei zu schließen-Objekt, wenn es zum Müll (was in diesem Fall unverzüglich - refcount 0 trifft, sobald die Anweisung abgeschlossen ist).
Vielleicht sollten Sie wechseln zu einem Linux-system 😉
Idee: wäre es möglich, dieses mit
python.exe
stattdessen aus einer DOS-box (cmd.exe
), die Sie offen lassen und ignorieren? Ein großes problem mit Debuggenpythonw.exe
Todesfälle ist, dass es keine Konsolen-Fenster zeigen Sie alle Fehlermeldungen, die möglicherweise pop-up.Führt zu einer weiteren Frage: was ist diese Zeile tun?
Wenn Sie unter
pythonw.exe
Sie nie sehen Sie es, richtig? Und dass kann Probleme verursachen, je nach genau, welche Versionen von Python und Windows ausgeführt.Standard input
undstandard output
nicht wirklich existieren, unterpythonw
, und ich erinnere mich, das aufspüren einer geheimnisvollenpythonw.exe
Tod des Microsoft-Bibliotheken zu sprengen, wenn "zu viel" Daten wurden geschrieben, umsys.stdout
(dieprint
verwendet).Ein Weg, zu sagen: wenn Sie diese unter
python.exe
statt aus einer DOS-box, und es läuft seit einem Jahr ohne Absturz, das war wohl die Ursache 😉Beispiel
Hier ist eine trivial-Programm:
Mit Python 2.7.6 unter 32-bit Windows Vista, es hat radikal unterschiedliches Verhalten, je nachdem, ob
python.exe
oderpythonw.exe
wird verwendet, um es auszuführen.Unter
python.exe
:Geht auf ewig, und der Wert in
count.txt
wird immer größer. Aber:Das heißt, es gibt keinen sichtbaren Ausgang. Und dass zu erwarten ist:
pythonw
läuft sein Programm getrennt von der Konsole-Fenster.Nach einer sehr kurzen Zeit, die
pythonw.exe
leise stirbt (Task-Manager verwenden, um dies zu sehen) verschwindet, ohne eine Spur zu hinterlassen. An diesem Punkt:Frau So Bibliotheken sind noch kacken Sie heraus, wenn "zu viel" wird auf stdout geschrieben von ein getrenntes Programm. Nehmen Sie die
print "hi!"
, und es läuft "für immer".Python 3
Diese "Feste" in Python 3, über die zweifelhafte zweckmäßig ist, verbindliche
sys.stdout
zuNone
unter seinerpythonw.exe
. Sie können Lesen die Geschichte dieses Durcheinander hier.pythonw.exe
aus einer DOS-box: die nachfolgendew
heißt das Programm getrennt von der Konsole. Fehlermeldungen geschickt, standard output oder standard error wird einfach verschwinden. Sie muss verwendenpython.exe
(ohne nachfolgendew
) zu vermeiden.