Pyinstaller生成的exe不能与Windows Task Scheduler一起运行

时间:2018-08-21 12:01:35

标签: python-2.7 pyinstaller py2exe taskscheduler

我从Pyinstaller生成了一个exe,当我双击该exe时,它可以完美运行,但是当我尝试通过Task Scheduler运行它时,它永远不会运行,但是在历史记录中,它显示“操作已成功完成”。

为确保它能运行,我将在exe运行时将一些文本记录到日志文件中,而这是通过任务计划程序永远不会发生的。

下面是我的Python程序的简单代码段。

import os
import threading
import sys 
import time
from datetime import datetime
from dateutil import tz

#Auto-detect zones:
from_zone = tz.tzutc()
to_zone = tz.tzlocal()

logFilespath = 'logs' 
if not os.path.exists(logFilespath):
    os.makedirs(logFilespath)

import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# create a file handler
todayDate = datetime.now()
todayDate = datetime.strftime(todayDate, '%Y%m%d')  
handler = logging.FileHandler('logs/log' + str(todayDate) + '.log')
handler.setLevel(logging.INFO)

# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# add the handlers to the logger
logger.addHandler(handler)

logger.info('**** Starting KPI Calculations ****')

我正在使用Python2.7并尝试使用py2exe,但结果相同。

2 个答案:

答案 0 :(得分:2)

解决此问题的简单方法:

1。在您的系统中找到python可执行文件。

import sys
print("Python EXE: " + sys.executable)

在我的情况下:“ C:\ users \ USER \ appdata \ local \ continuum \ anaconda3 \ python.exe”

2。选择您的python代码的路径。

在我的情况下:“ C:\ Users \ USER \ Documents \ SandBox \ test.py”

3。打开记事本并输入:'start PYTHONPATH SCRIPTPATH',如下所示:

start C:\users\USER\appdata\local\continuum\anaconda3\python.exe C:\Users\USER\Documents\SandBox\test.py

4。将此记事本另存为.bat。

5。安排此.bat

系统将正确运行将运行脚本的蝙蝠。

答案 1 :(得分:0)

我有同样的问题。我能够弄清楚可以解决此问题的一些方法。

我不明白为什么尝试运行exe本身不起作用。我仍然不知道这一点。因此,我启动了一个cmd实例(命令提示符)并从那里调用exe。

ActionDialog

定义任务将执行的操作时,需要使用以下设置:

程序/脚本:将其指向命令提示符下的exe。通常可以在C:\ Windows \ System32 \

中找到

添加参数:键入/ C,然后键入exe名称(因为exe名称包含空格,所以用引号引起来,但不确定是否需要)。您可以输入完整路径,但是我不需要,因为我也设置了“开始于”选项。

开始于:这告诉cmd要在哪个目录中打开。我将其指向包含要运行的exe的目录。这样,我不必在“添加参数”字段中提供完整路径。

举个例子:

程序/脚本:“ C:\ Windows \ System32 \ cmd.exe”

添加参数:/ C“ myexe.exe”

开始于:“ C:\ folder1 \ folder2 \ folderWithMyExe \”

这对我有用,并且在exe完成运行后关闭了命令提示符。