在Windows任务计划程序中执行Python代码时遇到问题

时间:2017-05-02 20:39:29

标签: python windows batch-file automation scheduled-tasks

我一直在寻求使用Windows任务管理器+ Python自动化报告,并且最近编写了一个可用于运行.py文件的脚本。但是,在实践中,它不起作用。我花了两天时间寻找答案并尝试不同的事情,但不能为我的生活弄清楚这一点。

场景:我正在尝试编写一个连接到服务器的独立可执行python代码,使用SQL提取数据,然后创建一个保存在文件夹中的dataframe / pivot表。这个过程就是我想要自动化的过程。

我目前的代码示例位于

之下
def module():
    sql = "SELECT * FROM TABLE"

    conn = connect(host="url.com", port=xxxxxx)
    cursor = conn.cursor()
    cursor.execute(sql)
    data = as_pandas(cursor)
    todays_date = datetime.datetime.now().date().strftime("%Y%m%d")

    df = data.loc[;,'date','stuff_and_thangs','column1','column2','column3']
    earliest_date = df['date'].min()
    latest_date = df['date'].max()
    df['stuff_and_thangs'] = df['stuff_and_thangs'].astype(float)
    df['stuff_and_thangs'] = df['stuff_and_thangs'].round(decimals = 2)
    df.sort_values(by = 'date', ascending = 'True')
    df.groupby(['date'], sort = True)['stuff_and_thangs','Column1','Column3']

    table = pd.pivot_table(df,index=['Column', 'Column1', 'Column3'], columns =['Column'], values =['Column3'], fill_value = 0)
    writer = pd.ExcelWriter('C:\User\blahblahblah/ %s to %s.xlsx' % (earliest_date, latest_date))
    #Convert the dataframe pivot table to an XlsxWriter Excel object.
    table.to_excel(writer, sheet_name='stuff_and_thangs')

    # Close the Pandas Excel writer and output the Excel file.
    writer.save()

if __name__ == "__main__":
    import pandas as pd
    import numpy as np
    from impala.dbapi import connect
    import datetime
    from impala.util import as_pandas
    module()

额外细节:

让我们说我的模块代码的文件名叫做file.py,我有一个批处理文件,让任务调度程序像这样运行设置(让我们调用批处理文件&# 34; batch.bat&#34):

start C:\Python27\python.exe file.py

我已经在Jupyter Notebook中编码,现在才开始尝试将这些转换为可执行的独立模块。我可能缺少哪些最佳实践?我试过调查环境变量但是,它们似乎设置得非常好。代码似乎在jupyter笔记本IDE中工作正常,但是一旦我将它变成python文件就无法工作。

2 个答案:

答案 0 :(得分:0)

有些事情可能会妨碍您的项目。任务计划程序可能未在您认为的用户安全上下文中运行。这取决于您是否选择“运行是否登录用户”,是否选择“以最高权限运行”,用户是否实际登录,和/或用户是否具有允许用户使用的本地策略运行批处理文件。

如果选择“运行用户是否登录”或选择“以最高权限运行”,则运行它的用户上下文将无法访问网络资源。我只知道两种解决方法。不要选择其中任何一个选项,并在用户登录的计算机上运行任务,该计算机可以访问所需的网络资源,或者在将这些资源提供给网络的服务器上运行,并使用本地引用引用它们,例如C:对于Windows,而不是UNC,在云存储的情况下可能不是一个选项。

Scheduled Task Security Context

Permissions To Run Batch job

答案 1 :(得分:0)

我有同样的问题。我的程序通过Jupyter或Spyder启动,但在Windows任务计划程序上无法正常工作。

由于打印到stdout不起作用,我制作了Python创建文件,帮助我缩小了问题范围。试试这个,它帮助我弄清楚它是无法导入的大熊猫:

t = open("text11.txt", "wb")
t.close()

import re

t = open("text12.txt", "wb")
t.close()

import pandas as pd

t = open("text19.txt", "wb")
t.close()

...

希望有所帮助!