shancx 1.9.33.220__tar.gz → 1.9.33.223__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {shancx-1.9.33.220 → shancx-1.9.33.223}/PKG-INFO +1 -1
- {shancx-1.9.33.220 → shancx-1.9.33.223}/setup.py +1 -1
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Hug/__init__.py +0 -3
- shancx-1.9.33.223/shancx/NN/chainMul.py +175 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/sendM.py +6 -7
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx.egg-info/PKG-INFO +1 -1
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx.egg-info/SOURCES.txt +1 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/README.md +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/setup.cfg +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/3D/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Class.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/CudaPrefetcher1.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Fake_image.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Hsml.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/L2Loss.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/MetricTracker.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Normalize.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/OptimizerWScheduler.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Rmageresize.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Savemodel.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/SmoothL1_losses.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/Tqdm.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/checknan.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/dsalgor.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/iouJU.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/mask.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/psnr.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/ssim.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/structural_similarity.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Algo/tool.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Calmetrics/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Calmetrics/calmetrics.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Calmetrics/calmetricsmatrixLib.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Calmetrics/rmseR2score.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Clip/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Cmd.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Config_.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Df/DataFrame.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Df/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Df/tool.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Diffm/Psamples.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Diffm/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Diffm/test.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Doc/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/E/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Fillmiss/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Fillmiss/imgidwJU.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Fillmiss/imgidwLatLonJU.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Gpu/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/H9/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/H9/ahi_read_hsd.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/H9/ahisearchtable.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/H9/geometry.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Inst.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Lib.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Mos/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/NN/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Path1.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/GlobMap.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/Gray2RGB.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/draw_day_CR_PNG.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/exam.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/plotGlobal.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/radarNmc.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Plot/single_china_map.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Point.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/QC.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/RdPzl/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Read.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Resize.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/SN/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Time/GetTime.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Time/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Time/timeCycle.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Time/tool.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Train/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Train/makelist.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Train/multiGpu.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Train/prepare.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/Train/renet50.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/ZR.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/args.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/bak.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/cmp.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/df2database.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/geosProj.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/getResponse.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/info.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/netdfJU.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/npz.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/tensBoard/__init__.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx/wait.py +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx.egg-info/dependency_links.txt +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx.egg-info/requires.txt +0 -0
- {shancx-1.9.33.220 → shancx-1.9.33.223}/shancx.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import time
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
import argparse
|
|
6
|
+
import datetime
|
|
7
|
+
import traceback
|
|
8
|
+
from dateutil.relativedelta import relativedelta
|
|
9
|
+
import pandas as pd
|
|
10
|
+
from shancx.NN import Mul_TH
|
|
11
|
+
from shancx.NN import _loggersPlus
|
|
12
|
+
from shancx.NN import cleanupLogs
|
|
13
|
+
from shancx.sendM import sendMES
|
|
14
|
+
BASE_DIR = '/mnt/wtx_weather_forecast/scx/sever7/product_log_scx/code06_re2_cp1/exam/mk_trainsatRadarMSG1'
|
|
15
|
+
PYTHON_ENV = '/home/scx/miniconda3/envs/mqpf/bin/python'
|
|
16
|
+
DEFAULT_GPU = '0'
|
|
17
|
+
DEFAULT_TIMEOUT = 2400
|
|
18
|
+
SCRIPT_DELAY = 2
|
|
19
|
+
# minutedict = {"20":8,"30":6,"40":4,"50":2,"0":0}
|
|
20
|
+
minutedict = {"0": 0 }
|
|
21
|
+
class PipelineExecutor:
|
|
22
|
+
def __init__(self, UTC, sat_cd, gpu=DEFAULT_GPU):
|
|
23
|
+
self.UTCstr = UTC.strftime("%Y%m%d%H%M")
|
|
24
|
+
self.sat_cd = sat_cd
|
|
25
|
+
self.gpu = gpu
|
|
26
|
+
self.produce_time= self.producetime(UTC)
|
|
27
|
+
self.scripts = self._initialize_scripts()
|
|
28
|
+
def producetime(self,UTC):
|
|
29
|
+
_minute = UTC.minute
|
|
30
|
+
_minute = minutedict.get(str(_minute),None)
|
|
31
|
+
if _minute is not None :
|
|
32
|
+
start_time = UTC - relativedelta(minutes=_minute) # "20":8 indicates that the step 2 command is executed at the 12-minute mark, which is between 20 and 10 minutes.
|
|
33
|
+
return start_time
|
|
34
|
+
else:
|
|
35
|
+
return None
|
|
36
|
+
def _initialize_scripts(self):
|
|
37
|
+
#step 1 command
|
|
38
|
+
scripts = [
|
|
39
|
+
{
|
|
40
|
+
'name': 'MSGsat',
|
|
41
|
+
'cmd': f"cd {os.path.join(BASE_DIR, 'makeMSGnc')} && {PYTHON_ENV} MSGsat.py --times {self.UTCstr[:12]}",
|
|
42
|
+
'timeout': DEFAULT_TIMEOUT
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
#step 2 command
|
|
46
|
+
if self.produce_time is not None:
|
|
47
|
+
times_str = self.produce_time.strftime("%Y%m%d%H%M")[:12]
|
|
48
|
+
scripts.extend([
|
|
49
|
+
# {
|
|
50
|
+
# 'name': 'mainSAT',
|
|
51
|
+
# 'cmd': f"cd {os.path.join('/mnt/wtx_weather_forecast/scx', 'mqpf_GEOSH9SEAStestCal')} && {PYTHON_ENV} mainSAT.py --times {times_str[:12]} --satcd H9SEAS --sepSec 360 --gpu '{self.gpu}' --isOverwrite --classer 'WT_RTH9SEAS'",
|
|
52
|
+
# 'timeout': DEFAULT_TIMEOUT
|
|
53
|
+
# },
|
|
54
|
+
# {
|
|
55
|
+
# 'name': 'mainSAT',
|
|
56
|
+
# 'cmd': f"cd {os.path.join('/mnt/wtx_weather_forecast/scx', 'mqpf_GEOSH9SEAStestCal')} && {PYTHON_ENV} mainSAT.py --times {times_str[:12]} --satcd H9CHNNEAS --sepSec 360 --gpu '{self.gpu}' --isOverwrite --classer 'WT_RTH9OC'",
|
|
57
|
+
# 'timeout': DEFAULT_TIMEOUT
|
|
58
|
+
# },
|
|
59
|
+
# {
|
|
60
|
+
# 'name': 'mainSAT',
|
|
61
|
+
# 'cmd': f"cd {os.path.join('/mnt/wtx_weather_forecast/scx', 'mqpf_GEOSH9SEAStestCal')} && {PYTHON_ENV} mainSAT.py --times {times_str[:12]} --satcd H9OC --sepSec 360 --gpu '{self.gpu}' --isOverwrite --classer 'WT_RTH9CHNNEAS'",
|
|
62
|
+
# 'timeout': DEFAULT_TIMEOUT
|
|
63
|
+
# },
|
|
64
|
+
# # [
|
|
65
|
+
# # # {
|
|
66
|
+
# # # 'name': 'satPzlSATREF',
|
|
67
|
+
# # # 'cmd': f"cd {os.path.join(BASE_DIR, 'SawPuz')} && {PYTHON_ENV} satPzlSAT.py --times {times_str[:12]} --satcd '{self.sat_cd}' --mqpf_cd 'REF'",
|
|
68
|
+
# # # 'timeout': DEFAULT_TIMEOUT
|
|
69
|
+
# # # },
|
|
70
|
+
# # # {
|
|
71
|
+
# # # 'name': 'satPzlSATQPF',
|
|
72
|
+
# # # 'cmd': f"cd {os.path.join(BASE_DIR, 'SawPuz')} && {PYTHON_ENV} satPzlSAT.py --times {times_str[:12]} --satcd '{self.sat_cd}' --mqpf_cd 'QPF' --isUpload ",
|
|
73
|
+
# # # 'timeout': DEFAULT_TIMEOUT
|
|
74
|
+
# # # }
|
|
75
|
+
# # ]
|
|
76
|
+
])
|
|
77
|
+
else:
|
|
78
|
+
logger.warning("produce_time is None, skipping mainSAT, satPzlSATREF and satPzlSATQPF command execution")
|
|
79
|
+
return scripts
|
|
80
|
+
def execute_script(self, conf):
|
|
81
|
+
script_info = conf[0]
|
|
82
|
+
script_name = script_info['name']
|
|
83
|
+
timeout = script_info['timeout']
|
|
84
|
+
logger.info(f"Starting to execute script: {script_name}")
|
|
85
|
+
try:
|
|
86
|
+
result = subprocess.run(
|
|
87
|
+
script_info['cmd'],
|
|
88
|
+
shell=True,
|
|
89
|
+
timeout=timeout,
|
|
90
|
+
check=False,
|
|
91
|
+
stdout=subprocess.PIPE,
|
|
92
|
+
stderr=subprocess.PIPE,
|
|
93
|
+
text=True
|
|
94
|
+
)
|
|
95
|
+
if result.returncode != 0:
|
|
96
|
+
logger.error(f"Script {script_name} execution failed, return code: {result.returncode}")
|
|
97
|
+
if result.stdout.strip():
|
|
98
|
+
logger.error(f"Output before failure:\n{result.stdout}")
|
|
99
|
+
if result.stderr.strip():
|
|
100
|
+
logger.error(f"Error output:\n{result.stderr}")
|
|
101
|
+
logger.error(f"Traceback:\n{traceback.format_exc()}")
|
|
102
|
+
return False
|
|
103
|
+
# Success case
|
|
104
|
+
if result.stdout.strip():
|
|
105
|
+
logger.debug(f"[{script_name}] Output:\n{result.stdout}")
|
|
106
|
+
if result.stderr.strip():
|
|
107
|
+
logger.warning(f"[{script_name}] Warning output:\n{result.stderr}")
|
|
108
|
+
logger.info(f"Script {script_name} executed successfully")
|
|
109
|
+
return True
|
|
110
|
+
except Exception as e:
|
|
111
|
+
logger.error(f"Script {script_name} execution exception: {str(e)}")
|
|
112
|
+
logger.error(f"Traceback:\n{traceback.format_exc()}")
|
|
113
|
+
sendMES(f"{traceback.format_exc()} ",NN="MT1")
|
|
114
|
+
return False
|
|
115
|
+
def run_pipeline(self):
|
|
116
|
+
"""Execute complete script pipeline"""
|
|
117
|
+
logger.info(f"Starting to process time slot: {self.UTCstr}, satellite: {self.sat_cd}")
|
|
118
|
+
for i, script in enumerate(self.scripts, 1):
|
|
119
|
+
if isinstance(script, list):
|
|
120
|
+
logger.info(f"Executing step {i}/{len(self.scripts)}: satPzlSAT")
|
|
121
|
+
Mul_TH(self.execute_script,[script])
|
|
122
|
+
else:
|
|
123
|
+
logger.info(f"Executing step {i}/{len(self.scripts)}: {script['name']}")
|
|
124
|
+
if not self.execute_script((script,)):
|
|
125
|
+
logger.error(f"Pipeline interrupted at {script['name']}, processing failed")
|
|
126
|
+
return False
|
|
127
|
+
if i < len(self.scripts):
|
|
128
|
+
time.sleep(SCRIPT_DELAY)
|
|
129
|
+
logger.info(f"Time slot {self.UTCstr} processing completed")
|
|
130
|
+
return True
|
|
131
|
+
def main(conf):
|
|
132
|
+
utc,sat_cd,gpu = conf[0],conf[1],conf[2]
|
|
133
|
+
executor = PipelineExecutor(utc, sat_cd, gpu)
|
|
134
|
+
return executor.run_pipeline()
|
|
135
|
+
def options():
|
|
136
|
+
parser = argparse.ArgumentParser(description='Pipeline Cascade time command execution')
|
|
137
|
+
parser.add_argument('--times', type=str, default='202412010000,202508010000')
|
|
138
|
+
parser.add_argument('--sat_cd', type=str, default='MSG')
|
|
139
|
+
parser.add_argument('--gpu', type=str, default='0')
|
|
140
|
+
config= parser.parse_args()
|
|
141
|
+
print(config)
|
|
142
|
+
config.times = config.times.split(",")
|
|
143
|
+
if len(config.times) == 1:
|
|
144
|
+
config.times = [config.times[0], config.times[0]]
|
|
145
|
+
config.times = [datetime.datetime.strptime(config.times[0], "%Y%m%d%H%M"),
|
|
146
|
+
datetime.datetime.strptime(config.times[1], "%Y%m%d%H%M")]
|
|
147
|
+
return config
|
|
148
|
+
if __name__ == "__main__":
|
|
149
|
+
cfg = options()
|
|
150
|
+
sUTC = cfg.times[0]
|
|
151
|
+
eUTC = cfg.times[-1]
|
|
152
|
+
sat_cd = cfg.sat_cd
|
|
153
|
+
gpu =cfg.gpu
|
|
154
|
+
sUTCstr = sUTC.strftime("%Y%m%d%H%M")
|
|
155
|
+
dir_ = f"./logs/{sat_cd}"
|
|
156
|
+
logger = _loggersPlus(root = dir_ , phase=f"{sUTCstr}_Pipeline")
|
|
157
|
+
from shancx.NN import cleanupLogs
|
|
158
|
+
stats = cleanupLogs(dir_,30, '*.log', False, False)
|
|
159
|
+
logging.info(f"clean={stats['total_dirs']}, cleanfile={stats['deleted_files']}, error={len(stats['errors'])}")
|
|
160
|
+
|
|
161
|
+
timeList = pd.date_range(sUTC, eUTC, freq='30min')
|
|
162
|
+
# filtered_times = [t for t in timeList if t.hour % 4 == 0 and t.minute == 0] #t.mintues
|
|
163
|
+
# result_times = []
|
|
164
|
+
# for t in filtered_times:
|
|
165
|
+
# result_times.extend(pd.date_range(t - pd.Timedelta(minutes=30), t, freq='10T'))
|
|
166
|
+
# for UTC in result_times:
|
|
167
|
+
# main((UTC,sat_cd,gpu))
|
|
168
|
+
Mul_TH(main,[timeList,[sat_cd],[gpu]],2)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
@@ -41,14 +41,13 @@ def sendMES(message,key='0f313-17b2-4e3d-84b8-3f9c290fa596',NN = None):
|
|
|
41
41
|
elif NN=="MSGAF":
|
|
42
42
|
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5797fbe9-1c19-4a67-a6fc-83a85cb464a7"
|
|
43
43
|
elif NN=="GOES18C":
|
|
44
|
-
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4ddac32b-692b-4aa0-9d69-0e655552ff17"
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=4ddac32b-692b-4aa0-9d69-0e655552ff17"
|
|
47
45
|
elif NN=="GFS":
|
|
48
|
-
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=13f39c2f-e191-4100-b1ee-7316ac9c2451"
|
|
49
|
-
else:
|
|
50
46
|
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=13f39c2f-e191-4100-b1ee-7316ac9c2451"
|
|
51
|
-
|
|
47
|
+
elif NN=="WTX":
|
|
48
|
+
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=44869d2b-ab46-4bad-9621-4cda03470908"
|
|
49
|
+
else:
|
|
50
|
+
webHookUrl ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=13f39c2f-e191-4100-b1ee-7316ac9c2451"
|
|
52
51
|
try:
|
|
53
52
|
url=webHookUrl
|
|
54
53
|
headers = {"Content-Type":"application/json"}
|
|
@@ -56,4 +55,4 @@ def sendMES(message,key='0f313-17b2-4e3d-84b8-3f9c290fa596',NN = None):
|
|
|
56
55
|
res = requests.post(url,json=data,headers=headers)
|
|
57
56
|
except Exception as e:
|
|
58
57
|
print(e)
|
|
59
|
-
|
|
58
|
+
"""sendMES(f" {sat_cd} {UTC}",NN="WTX")"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|