Сценарий Python не работает должным образом при вызове планировщика задач

Я новичок в Python и на этом сайте. Извините, если это может быть просто.

Я изменил скрипт Python, который вычисляет количество слов в файле PDF «Master.pdf» и записывает время и дату, а также количество слов в файл .txt.

У меня установлен Python 2.7, я установил Anancoda и использую редактор PyCharm. Когда я открываю свой редактор PyCharm и запускаю этот скрипт, проблем не возникает, скрипт выполняется и все работает.

Поскольку я хотел бы, чтобы этот скрипт запускался каждые 15 минут, я сделал его задачей с помощью планировщика заданий. Задача "Запустить программу" программа: - C:\Users\alkare\AppData\Local\Continuum\anaconda2\python.exe - и аргумент - "C:/Users/alkare/Desktop/Report/WordCount .py"-.

всякий раз, когда он запускается, я вижу, что командная строка открыта, какой-то текст летит по моему экрану, а затем терминал командной строки закрывается, НО никаких изменений в моем .txt-файле не происходит.

вот код, который я использую, сохраненный как "WordCount.py":

#!/usr/bin/env python2.7
import os
import sys
import re
import datetime
import PyPDF2

def getPageCount(pdf_file):
    pdfFileObj = open(pdf_file, 'rb')
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    pages = pdfReader.numPages
    return pages


def extractData(pdf_file, page):
    pdfFileObj = open(pdf_file, 'rb')
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    pageObj = pdfReader.getPage(page)
    data = pageObj.extractText()
    return data


def getWordCount(data):
    data = data.split()
    return len(data)


def main():
    pdfFile = 'Master.pdf'

    # get the word count in the pdf file
    totalWords = 0
    numPages = getPageCount(pdfFile)
    for i in range(numPages):
        text = extractData(pdfFile, i)
        totalWords += getWordCount(text)
        Now = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
    f = open("TrackingTimeData.txt", "a")
    f.write(Now[0:4] + "\t" + Now[4:6] + "/" + Now[6:8] + "\t" + Now[9:11] + ":" + Now[11:13] + "\t" + str(totalWords) + "\n")
    f.close()


if __name__ == '__main__':
    main()

person Alexander Kappel Reumert    schedule 23.10.2017    source источник
comment
Попробуйте указать полный путь к TrackingTimeData.txt, возможно, он создается в другом каталоге.   -  person Maurice Meyer    schedule 23.10.2017
comment
Не работает. Два файла находятся в одной папке. Когда я не указываю полный путь, я могу запустить его в моем редакторе PyCharm. НО я об этом не подумал. Спасибо, в любом случае.   -  person Alexander Kappel Reumert    schedule 23.10.2017
comment
Затем укажите «каталог выполнения» для запланированной задачи на каталог, в котором вы хотите сохранить файл.   -  person Maurice Meyer    schedule 23.10.2017
comment
Это исправило это! Ты гений!! Большое спасибо! Я назову своего первенца в твою честь! Эта проблема заняла у меня три дня!   -  person Alexander Kappel Reumert    schedule 23.10.2017
comment
Привет, ребята. Ошибка была не в вашем коде, а в настройке планировщика задач Windows. Технически это, вероятно, следует перенести на ServerFault.com, поскольку это не связано с кодом. Также - @MauriceMeyer создайте ответ, чтобы Александр мог отметить его принятым. Удачного кодирования :)   -  person Jordan Stefanelli    schedule 07.02.2018


Ответы (1)


Проблема в том, что вы допускаете сбой программы, не предоставляя вам никакого значимого вывода (звучит так, как будто она попадает в исключение и закрывается).

Вместо того, чтобы просто вызывать main() без его защиты в блоке try:

if __name__ == '__main__':
    main()

дайте себе слабину здесь, чтобы собрать информацию:

if __name__ == '__main__':
    try:    
        main()
    except Exception as e:
        print("Error {}".format(e))
        # drop into a command-prompt debugger:
        import pdb
        pdb.set_trace()

        # slightly more old-school, pause the window to read the exception:            
        import time
        time.sleep(15)

        # throwback to DOS windows
        import os
        os.system('pause')

        # read the error, come back to stackoverflow and describe the problem more, etc.

Например, смешивая это с планировщиком задач, вы захотите щелкнуть правой кнопкой мыши свой python.exe в Windows, перейти к свойствам, установить «Запуск от имени администратора», потому что, возможно, вы получаете отказ в доступе при попытке чтения / записи в .PDF в каком-то специальном каталоге. Это всего лишь пример множества предположений, которые люди могут случайно предложить, чтобы помочь вам решить проблему, вместо того, чтобы точно знать, в чем заключается ошибка.

person Jordan Stefanelli    schedule 23.10.2017
comment
Это отличная идея. Я уже исправил это, но обязательно сделаю это в следующий раз. Спасибо чувак. - person Alexander Kappel Reumert; 23.10.2017
comment
То же самое окно выскочило бы и исчезло. У вас были проблемы с относительным и абсолютным путем между кодом и настройкой планировщика задач (т. е. указать запланированное выполнение задачи на рабочий каталог сценария). - person Jordan Stefanelli; 07.02.2018