json - 为什么通过批处理文件运行的 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)按预期运行。
解决方案
感谢@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)
或者,将任务计划程序定向到工作目录以避免批处理在默认的根目录中运行。
推荐阅读
- ios - 按钮添加目标函数未在 CollectionView 单元格中调用
- apache-flink - Flink 修改基于 KeySelector 的 ProcessWindow
- ruby - 将动态附加费用添加到订阅中
- c++ - 为什么我们在下面给出的 C++ 代码中实例化实体对象时不使用指针?
- java - JavaCPP 错误:无法将参数 '1' 的 `char*` 转换为 `Abc*` 到 `void testMyObject(Abc*)`
- microsoft-teams - Microsoft Teams 中的个人选项卡和团队选项卡之间的区别。每个选项卡的优缺点是什么?
- java - 为多个主题创建一个 kafka 消费者
- php - Symfony 无法发布 ckeditor 类型
- vue.js - 打印不必要的转义字符
- amazon-web-services - 从 EC2 读取 S3 存储桶以进行 ML 训练