質問編集履歴
6
調査結果
title
CHANGED
File without changes
|
body
CHANGED
@@ -217,4 +217,21 @@
|
|
217
217
|
|
218
218
|
|
219
219
|
### 20210307 14:35 qnoirさん提供プログラム、デバッグ実行の結果
|
220
|
-

|
220
|
+

|
221
|
+
|
222
|
+
|
223
|
+
### 20210305 15:35 qnoirさん提供プログラム実行結果
|
224
|
+
【1回目↓】
|
225
|
+
```log
|
226
|
+
2021-03-07 15:21:11,822 | Started to observe. [path : .\20210307_152111_6038_log.txt]
|
227
|
+
2021-03-07 15:21:35,150 | on_created() : C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
228
|
+
2021-03-07 15:21:38,384 | on_modified(): C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
229
|
+
2021-03-07 15:21:46,792 | on_modified(): C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
230
|
+
```
|
231
|
+
【2回目↓】
|
232
|
+
```log
|
233
|
+
2021-03-07 15:25:08,158 | Started to observe. [path : .\20210307_152508_5250_log.txt]
|
234
|
+
2021-03-07 15:25:34,611 | on_created() : C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
235
|
+
2021-03-07 15:25:38,299 | on_modified(): C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
236
|
+
2021-03-07 15:25:49,393 | on_modified(): C:\Tools\SalesforceConnect\data\SFA09\Reservation_insert_error.csv
|
237
|
+
```
|
5
画像追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -213,4 +213,8 @@
|
|
213
213
|
|
214
214
|
アクセスが拒否されました、と言われながら 移動はできた....状況ですね。
|
215
215
|
ベンダ様提供のプログラムが C#やVB.NETでいうUsingみたいなものを使っていない、というこでしょうか?
|
216
|
-
何か 当方のPython側で どうにか対策できないでしょうか
|
216
|
+
何か 当方のPython側で どうにか対策できないでしょうか
|
217
|
+
|
218
|
+
|
219
|
+
### 20210307 14:35 qnoirさん提供プログラム、デバッグ実行の結果
|
220
|
+

|
4
誤記訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
class BackUp():
|
58
58
|
###############################################################################################
|
59
|
-
# 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避
|
59
|
+
# 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避
|
60
60
|
|
61
61
|
# 監視フォルダと 退避先フォルダが引数
|
62
62
|
def move_files(self, src_dir, dst_dir):
|
@@ -203,10 +203,14 @@
|
|
203
203
|
### 追加報告 20200307 11:40
|
204
204
|
送信データが移動元フォルダに残ってしまう事象につき、また当該アプリケーションが動作し続けることから以下を試行
|
205
205
|
①フリーソフトの当該バットファイルの実装設定(検知設定)を前回実行から3分過ぎない限り再実施無理なよう対応。
|
206
|
-
=
|
206
|
+
=> 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
|
207
207
|
|
208
208
|
②自アプリケーション内で 新規ファイル察知(1バイト以上)後の メール・退避動作までの待機時間3分を挿入。
|
209
|
-
=
|
209
|
+
=>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
|
210
210
|
|
211
|
-
一体何が起きているのだと思い、移動元フォルダに残ったファイルを コマンドプロンプトから削除を試行
|
211
|
+
一体何が起きているのだと思い、移動元フォルダに残ったファイルを コマンドプロンプトから削除を試行
|
212
|
-

|
212
|
+

|
213
|
+
|
214
|
+
アクセスが拒否されました、と言われながら 移動はできた....状況ですね。
|
215
|
+
ベンダ様提供のプログラムが C#やVB.NETでいうUsingみたいなものを使っていない、というこでしょうか?
|
216
|
+
何か 当方のPython側で どうにか対策できないでしょうか
|
3
誤記訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -55,10 +55,8 @@
|
|
55
55
|
|
56
56
|
|
57
57
|
class BackUp():
|
58
|
-
|
59
|
-
#
|
60
|
-
# 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避!
|
61
|
-
# # ######################################################################################################
|
58
|
+
###############################################################################################
|
59
|
+
# 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避###############################################################################################
|
62
60
|
|
63
61
|
# 監視フォルダと 退避先フォルダが引数
|
64
62
|
def move_files(self, src_dir, dst_dir):
|
@@ -100,7 +98,7 @@
|
|
100
98
|
shutil.move(os.path.join(src_dir, p), dst_dir)#★移動できれば使用中でないと判断★
|
101
99
|
break
|
102
100
|
except Exception as e:
|
103
|
-
time.sleep(1)
|
101
|
+
time.sleep(1) #★移動できなければ送信中と判断、また移動をリトライ★
|
104
102
|
|
105
103
|
|
106
104
|
#★★★監視フォルダ内全てのファイルが移動退避し終えたら 関数を終わらせてアプリも閉じたい★★★
|
@@ -204,8 +202,9 @@
|
|
204
202
|
|
205
203
|
### 追加報告 20200307 11:40
|
206
204
|
送信データが移動元フォルダに残ってしまう事象につき、また当該アプリケーションが動作し続けることから以下を試行
|
207
|
-
①フリーソフトの当該バットファイルの実装設定(検知設定)を
|
205
|
+
①フリーソフトの当該バットファイルの実装設定(検知設定)を前回実行から3分過ぎない限り再実施無理なよう対応。
|
208
206
|
===> 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
|
207
|
+
|
209
208
|
②自アプリケーション内で 新規ファイル察知(1バイト以上)後の メール・退避動作までの待機時間3分を挿入。
|
210
209
|
===>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
|
211
210
|
|
2
追加報告
title
CHANGED
File without changes
|
body
CHANGED
@@ -55,23 +55,22 @@
|
|
55
55
|
|
56
56
|
|
57
57
|
class BackUp():
|
58
|
-
######################################################################################################
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
###########################################################################################################
|
58
|
+
######################################################################################################
|
59
|
+
# #
|
60
|
+
# 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避!
|
61
|
+
# # ######################################################################################################
|
63
62
|
|
64
63
|
# 監視フォルダと 退避先フォルダが引数
|
65
64
|
def move_files(self, src_dir, dst_dir):
|
66
65
|
|
67
66
|
dt_now = datetime.datetime.now()
|
68
67
|
dst_dir = dst_dir + "/" + dt_now.strftime('%Y%m%d%H%M%S')
|
69
|
-
os.makedirs(dst_dir, exist_ok=True)
|
68
|
+
os.makedirs(dst_dir, exist_ok=True) #指定の退避先フォルダ内に日付時間フォルダを作成
|
70
69
|
|
71
|
-
for p in os.listdir(src_dir):
|
70
|
+
for p in os.listdir(src_dir): #監視フォルダ内コレクションループ
|
72
|
-
fullpath = os.path.join(src_dir, p)
|
71
|
+
fullpath = os.path.join(src_dir, p) #ファイルのフルパスを取得
|
73
72
|
|
74
|
-
wcnt = 0
|
73
|
+
wcnt = 0 #この関数動作由来の新規ファイルはサイズ0の可能性あり-->待機
|
75
74
|
while True:
|
76
75
|
size = os.path.getsize(fullpath)
|
77
76
|
if size == 0 :
|
@@ -83,7 +82,7 @@
|
|
83
82
|
break
|
84
83
|
|
85
84
|
base, ext = os.path.splitext(p)
|
86
|
-
if ext == ".csv" :
|
85
|
+
if ext == ".csv" : #サイズ1以上CSVファイルは処理結果内容-->メールで添付送信
|
87
86
|
if argcnt < 5 :
|
88
87
|
if argcnt == 4 :
|
89
88
|
result = mail.send_Mail(引数の数から宛先のみの指定)
|
@@ -98,20 +97,20 @@
|
|
98
97
|
if wcnt > 1800 : #無限ループ対策(30)
|
99
98
|
break
|
100
99
|
try :
|
101
|
-
shutil.move(os.path.join(src_dir, p), dst_dir)
|
100
|
+
shutil.move(os.path.join(src_dir, p), dst_dir)#★移動できれば使用中でないと判断★
|
102
101
|
break
|
103
102
|
except Exception as e:
|
104
103
|
time.sleep(1) #★移動できなければ送信中と判断、また移動をリトライ★
|
105
104
|
|
106
105
|
|
107
|
-
|
106
|
+
#★★★監視フォルダ内全てのファイルが移動退避し終えたら 関数を終わらせてアプリも閉じたい★★★
|
108
107
|
|
109
108
|
'''
|
110
|
-
######################################################################################################
|
109
|
+
######################################################################################################
|
111
110
|
# #
|
112
111
|
# #
|
113
112
|
# #
|
114
|
-
######################################################################################################
|
113
|
+
######################################################################################################
|
115
114
|
'''
|
116
115
|
class ChangeHandler(FileSystemEventHandler):
|
117
116
|
def __init__(self, observer):
|
@@ -128,8 +127,8 @@
|
|
128
127
|
backup.move_files(arges[4], arges[5])
|
129
128
|
|
130
129
|
|
131
|
-
self.observer.unschedule_all()
|
130
|
+
self.observer.unschedule_all()#★★ 監視フォルダに送信ファイル残ることがある。でも退避もされている!
|
132
|
-
self.observer.stop()
|
131
|
+
self.observer.stop() #★★ しかも終わってくれない(新たな監視状況がつくりだされているような感じ)
|
133
132
|
|
134
133
|
|
135
134
|
|
@@ -151,7 +150,7 @@
|
|
151
150
|
|
152
151
|
observer = Observer()
|
153
152
|
event_handler = ChangeHandler(observer)
|
154
|
-
observer.schedule(event_handler, target_dir, recursive=True)
|
153
|
+
observer.schedule(event_handler, target_dir, recursive=True)#特定のフォルダを引数に与えて監視スタート
|
155
154
|
observer.start()
|
156
155
|
try:
|
157
156
|
while observer.is_alive():
|
@@ -201,4 +200,14 @@
|
|
201
200
|
|
202
201
|
rem 送信処理、本来このコマンド行のみのバットファイルだが上記START文を追加
|
203
202
|
DELETE_INSERT.bat "STOCKS_export" "STOCKS_delete" "STOCKS_insert"
|
204
|
-
```
|
203
|
+
```
|
204
|
+
|
205
|
+
### 追加報告 20200307 11:40
|
206
|
+
送信データが移動元フォルダに残ってしまう事象につき、また当該アプリケーションが動作し続けることから以下を試行
|
207
|
+
①フリーソフトの当該バットファイルの実装設定(検知設定)を、前回の実行から3分過ぎない限り再実施無理なよう対応。
|
208
|
+
===> 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
|
209
|
+
②自アプリケーション内で 新規ファイル察知(1バイト以上)後の メール・退避動作までの待機時間3分を挿入。
|
210
|
+
===>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
|
211
|
+
|
212
|
+
一体何が起きているのだと思い、移動元フォルダに残ったファイルを コマンドプロンプトから削除を試行、以下のとおり
|
213
|
+

|
1
追加の報告
title
CHANGED
File without changes
|
body
CHANGED
@@ -168,4 +168,37 @@
|
|
168
168
|
|
169
169
|
本来メール報告とファイル退避を終えたら 【当該アプリケーション自体】を終わらせることを望んでいますが、先の問題が生じるパターンでは いつになっても終わらない問題も生じています。---->新たな監視状況が作られてしまっているような感じ?! でしょうか.....
|
170
170
|
|
171
|
-
これは 上記のコードで 一体何が悪く このような問題が起きてしまっているのでしょうか? どなたかご教示を頂けますと幸いです、よろしくお願い申し上げます。
|
171
|
+
これは 上記のコードで 一体何が悪く このような問題が起きてしまっているのでしょうか? どなたかご教示を頂けますと幸いです、よろしくお願い申し上げます。
|
172
|
+
|
173
|
+
|
174
|
+
### 追記20210307 10:10
|
175
|
+
ベンダ様から提供されているデータ送信処理のバットファイルに、自分のアプリが前もって起動されるよう挿入したのですが
|
176
|
+
データ種類の違いで データ送信処理の実装方法が異なるようです。このことから監視フォルダに生成されるCSVファイルの生成・使用タイミング(共有状況)に違いを生んでいる可能性があります。以下バットファイルの【違い】を表しました。
|
177
|
+
フリーの監視ソフトによって 送信すべきデータファイルが所定フォルダに配置されると 以下のバットファイルが動作するようになっていますが、これが再度実施されていて 自分のアプリケーションも再起動されている可能性があります....(でもフリーの監視ソフトにその記録が残っていない)
|
178
|
+
|
179
|
+
【問題ないパターン↓】
|
180
|
+
```bat
|
181
|
+
@ECHO OFF
|
182
|
+
rem #########################################################
|
183
|
+
rem #
|
184
|
+
rem #########################################################
|
185
|
+
|
186
|
+
START D:\今回作ったプログラム 引数1, 引数2, 引数3
|
187
|
+
|
188
|
+
rem 送信処理、本来このコマンド行のみのバットファイルだが上記START文を追加
|
189
|
+
|
190
|
+
UPSERT.bat "ITEMMASTER_upsert"
|
191
|
+
```
|
192
|
+
|
193
|
+
【問題あるパターン↓】
|
194
|
+
```bat
|
195
|
+
@ECHO OFF
|
196
|
+
rem #########################################################
|
197
|
+
rem #
|
198
|
+
rem #########################################################
|
199
|
+
|
200
|
+
START D:\今回作ったプログラム 引数1, 引数2, 引数3
|
201
|
+
|
202
|
+
rem 送信処理、本来このコマンド行のみのバットファイルだが上記START文を追加
|
203
|
+
DELETE_INSERT.bat "STOCKS_export" "STOCKS_delete" "STOCKS_insert"
|
204
|
+
```
|