【问题标题】:Scheduler makes a python script run but doesn't produce a csv file调度程序使 python 脚本运行但不生成 csv 文件
【发布时间】:2018-12-02 13:53:01
【问题描述】:

我用 python 编写了一个脚本来从网页中抓取一些链接并将它们写入 csv 文件。从 IDE 运行时,我的脚本以正确的方式执行此操作。

当我使用windows task scheduler 运行相同的程序时,我可以看到command prompt 弹出并且脚本运行并在那里打印结果,但是当任务完成时我没有得到任何 csv 文件。

我错过了什么吗?

当脚本通过windows task scheduler 中的.bat 文件运行时,我应该带来哪些可能的更改来获取 csv 文件?

.bat 包含:

@echo off
"C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\python.exe" "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\examplescript.py"

examplescript.py 包含:

import csv
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup

url = "https://www.janglo.net/component/option,com_sobi2/"

def get_info(link):
    res = requests.get(url)
    soup = BeautifulSoup(res.text,"lxml")
    for items in soup.select("#sobi2CatListSymbols .sobi2SubcatsListItems a[title]"):
        if items.text=="Tutors":
            ilink = f"{urljoin(url,items.get('href'))}"
    return ilink

def get_links(tlink):
    linklist = []
    res = requests.get(tlink)
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select(".sobi2ItemTitle a"):
        linklist.append(urljoin(url,item.get("href")))
    return linklist

if __name__ == '__main__':
    with open("task_scheduler.csv","a",newline="") as infile:
        writer = csv.writer(infile)
        item = get_info(url)
        for nlink in get_links(item):
            print(nlink)
            writer.writerow([nlink])

下面我已经明确指定了“.bat”文件的位置:

"C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\test_schedule.bat"

【问题讨论】:

  • 您不需要单行批处理文件即可将 Python 脚本作为任务运行。我不知道你为什么认为你需要它。
  • 那是因为不执行.batfile@eryksun.
  • 将“python.exe”的全限定路径放入“program”字段; “参数”字段中脚本的完全限定和引用路径;以及“开始于”字段中的完全限定的工作目录。也就是说,出于各种原因,您不应该将数据文件保存在 Python 目录或应用程序目录中,包括通常您的程序可能无权在其中创建文件的事实。对于用户可见的数据,请使用众所周知的用户数据文件夹,例如“文档”。

标签: python python-3.x windows windows-task-scheduler


【解决方案1】:

您的代码会写入当前工作目录,因为它会打开一个没有路径的文件名。 .bat 文件的位置并不能确定正在运行的代码的当前工作目录

您没有指定工作目录;我希望使用调度程序中的 Start in 字段进行设置,因此该文件是在 default location%Windir%\System32\ 中创建的。

Start in 字段中为要创建的 CSV 文件设置一个目录,让您的批处理脚本使用 cd 将当前工作目录移动到正确的位置,或者使用打开文件时的绝对路径。

例如,如果您的批处理脚本首先运行 cd /d %~dp0,则工作目录将更改为批处理脚本的目录,并且 Python 中的相对路径将针对该位置进行解析。

【讨论】:

  • 对,你是@sir Martijn Pieters!!我在该默认目录(system32)中找到了一个包含这些必填字段的 csv 文件。但是,当我在 Start in (optional): 输入框旁边指定这个 C:\Users\WCS\Desktop 地址时(在上图中可见),我仍然会在默认目录中获得 csv 文件。我是否正确遵循了您的指示?
  • @asmitu:我不知道。我自己不使用 Windows,我的研究表明该选项 应该 为您正在运行的命令设置当前工作目录。但是,如果批处理脚本 CWD 没有继续执行,我添加了另一个选项:cd /d %~dp0
猜你喜欢
  • 2018-02-06
  • 1970-01-01
  • 2012-10-15
  • 2021-08-30
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多