我从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,但结果相同。
答案 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。
定义任务将执行的操作时,需要使用以下设置:
程序/脚本:将其指向命令提示符下的exe。通常可以在C:\ Windows \ System32 \
中找到添加参数:键入/ C,然后键入exe名称(因为exe名称包含空格,所以用引号引起来,但不确定是否需要)。您可以输入完整路径,但是我不需要,因为我也设置了“开始于”选项。
开始于:这告诉cmd要在哪个目录中打开。我将其指向包含要运行的exe的目录。这样,我不必在“添加参数”字段中提供完整路径。
举个例子:
程序/脚本:“ C:\ Windows \ System32 \ cmd.exe”
添加参数:/ C“ myexe.exe”
开始于:“ C:\ folder1 \ folder2 \ folderWithMyExe \”
这对我有用,并且在exe完成运行后关闭了命令提示符。