首页 > 解决方案 > 为什么通过批处理文件运行的 Python 脚本不写入 json 文件?

问题描述

我有一个 Python 脚本,它执行一些网络抓取,然后打开并将解析的数据转储到同一目录中的 JSON 文件中。当脚本通过 CLI 手动运行时,一切正常,但是当从任务调度程序运行的批处理文件运行时,数据不会写入 JSON 文件。

当通过批处理文件运行时,我已经设法证明所有数据都存在于 Python 脚本中。不知何故,只有部分处理 JSON 文件的函数没有运行。

Python脚本:

# Packages used:
import requests
from bs4 import BeautifulSoup
import smtplib
import time
from win10toast import ToastNotifier
import json

# Web Scraping...

my_json = {}

def function1():
    # Web scraping for data...

    json_function(data)

# Below is the function that is not functioning
def json_function(data):
    my_json[time.strftime("%Y-%m-%d %H:%M")] = f"{data}"
    with open ('json_file.json') as my_dict:
        info = json.load(my_dict)
    info.update(my_json)

    with open('json_file.json','w') as my_dict:
        json.dump(info,my_dict)

# A few other functions that work regardless...

# Call function
function1()

批处理文件:

"C:\Users\...pythonw.exe" "C:\Users...script.pyw"

JSON文件:

{"Key":"Value"}

每个文件都在同一个目录中。

从 CLI 运行时,会出现预期结果 - 将键值附加到 JSON 文件。当自动运行时(通过批处理和任务调度程序),没有可见的错误,并且所有脚本(保存为 json_function)按预期运行。

标签: jsonpython-3.xbatch-filescheduled-tasks

解决方案


感谢@PRMoureu 的回答,感谢@Mofi 的详细解释。

答案是确保引用的所有文件都引用了它们的完整路径:

    def json_function(data):
    my_json[time.strftime("%Y-%m-%d %H:%M")] = f"{data}"
    with open ('C:/.../json_file.json') as my_dict:
        info = json.load(my_dict)
    info.update(my_json)

    with open('C:/.../json_file.json','w') as my_dict:
        json.dump(info,my_dict)

或者,将任务计划程序定向到工作目录以避免批处理在默认的根目录中运行。


推荐阅读