我有一个大型 python 脚本,它在 PyCharm 和 CMD 窗口中运行得很好,但是当我通过任务调度程序自动化它时,它一直挂断并在同一点失败。我已经缩小了代码中存在问题的范围,但我终其一生都无法弄清楚为什么会出现问题。我什至尝试为任务调度程序构建一个 .bat 文件以运行,但它仍然失败。
代码(这是它一直失败的部分):
import time
import turbodbc as to
import sys
logfile = "E:\\Python_Scripts\\Report\\log_file.txt"
f = open(logfile, "w")
f.write('Start - ' + str(time.ctime(time.time())) + '\n')
f.close()
# SCA SQL Server Connection
vns_odbc_driver = '{ODBC Driver 17 for SQL Server}'
vns_sql_driver = '{SQL Server Native Client 11.0}'
vns_sql_server = 'SERVER'
vns_sql_database = 'DATABASE'
vns_sql_schema = 'dbo'
vns_sql_username = 'USER'
vns_sql_password = 'PASS'
vns_sql_protocol = 'TCPIP'
vns_sql_port = '1675'
f = open(logfile, "a")
f.write(" 1. - " + str(time.ctime(time.time())) + '\n')
f.close()
try:
vns_sql_conn = to.connect(
driver=vns_odbc_driver, # vns_sql_driver
server=vns_sql_server,
database=vns_sql_database,
uid=vns_sql_username,
pwd=vns_sql_password,
protocol=vns_sql_protocol,
port=vns_sql_port,
autocommit=True
)
except:
e = sys.exc_info()[0]
print(e)
f = open(logfile, "a")
f.write(" 2. " + str(e) + ' - ' + str(time.ctime(time.time())) + '\n')
f.close()
f = open(logfile, "a")
f.write(" 3." + ' - ' + str(time.ctime(time.time())) + '\n')
f.close()
try:
vns_sql_conn.close()
except:
pass
f = open(logfile, "a")
f.write(" 4." + ' - ' + str(time.ctime(time.time())) + '\n')
f.close()
当我打印到日志文件时,从任务调度程序运行时会得到以下结果:
Start - Mon Jun 22 13:03:53 2020
1. - Mon Jun 22 13:03:53 2020
2. <class 'turbodbc.exceptions.DatabaseError'> - Mon Jun 22 13:04:09 2020
3. - Mon Jun 22 13:04:09 2020
4. - Mon Jun 22 13:04:09 2020
但是,当我从 CMD 窗口或 PyCharm 运行它时,我会得到这个日志文件:
Start - Mon Jun 22 13:03:53 2020
1. - Mon Jun 22 13:03:53 2020
3. - Mon Jun 22 13:04:09 2020
4. - Mon Jun 22 13:04:09 2020
这意味着它运行良好并连接到数据源。我认为它必须与使用任务调度程序中的驱动程序的权限有关?我以管理员权限登录到我的服务器,并设置了具有最高权限的任务...