teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

調査結果

2021/03/07 06:35

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -217,4 +217,21 @@
217
217
 
218
218
 
219
219
  ### 20210307 14:35 qnoirさん提供プログラム、デバッグ実行の結果
220
- ![イメージ説明](6d3ff87ebf205e5e547451cf79e8e951.png)
220
+ ![イメージ説明](6d3ff87ebf205e5e547451cf79e8e951.png)
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

画像追加

2021/03/07 06:35

投稿

saya24
saya24

スコア258

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
+ ![イメージ説明](6d3ff87ebf205e5e547451cf79e8e951.png)

4

誤記訂正

2021/03/07 05:34

投稿

saya24
saya24

スコア258

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
- ===> 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
206
+ => 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
207
207
 
208
208
  ②自アプリケーション内で 新規ファイル察知(1バイト以上)後の メール・退避動作までの待機時間3分を挿入。
209
- ===>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
209
+ =>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
210
210
 
211
- 一体何が起きているのだと思い、移動元フォルダに残ったファイルを コマンドプロンプトから削除を試行、以下のとおり
211
+ 一体何が起きているのだと思い、移動元フォルダに残ったファイルを コマンドプロンプトから削除を試行
212
- ![イメージ説明](6445744a235ab666b171f45b73410041.png)
212
+ ![イメージ説明](6445744a235ab666b171f45b73410041.png)
213
+
214
+ アクセスが拒否されました、と言われながら 移動はできた....状況ですね。
215
+ ベンダ様提供のプログラムが C#やVB.NETでいうUsingみたいなものを使っていない、というこでしょうか?
216
+ 何か 当方のPython側で どうにか対策できないでしょうか

3

誤記訂正

2021/03/07 02:56

投稿

saya24
saya24

スコア258

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
- ①フリーソフトの当該バットファイルの実装設定(検知設定)を前回実行から3分過ぎない限り再実施無理なよう対応。
205
+ ①フリーソフトの当該バットファイルの実装設定(検知設定)を前回実行から3分過ぎない限り再実施無理なよう対応。
208
206
  ===> 効果なし、フリーソフトのログに当初から2重実行されている記録は残っていないので納得の結果
207
+
209
208
  ②自アプリケーション内で 新規ファイル察知(1バイト以上)後の メール・退避動作までの待機時間3分を挿入。
210
209
  ===>効果なし、相変わらず移動元フォルダに送信データ残るが 退避先フォルダには処理結果CSVと共に保管されている。
211
210
 

2

追加報告

2021/03/07 02:51

投稿

saya24
saya24

スコア258

title CHANGED
File without changes
body CHANGED
@@ -55,23 +55,22 @@
55
55
 
56
56
 
57
57
  class BackUp():
58
- ###########################################################################################################
59
- # #
60
- # 送信処理が終わると、処理結果がCSVで 同フォルダに提供される⇒⇒⇒メール送信後に送信データと併せ退避!#
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 #この関数動作由来の新規ファイルはサイズ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" : #サイズ1以上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() #★★★★★★ 監視フォルダにCSVではない送信ファイル残ることがある。でも退避もされている!
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
+ ![イメージ説明](6445744a235ab666b171f45b73410041.png)

1

追加の報告

2021/03/07 02:46

投稿

saya24
saya24

スコア258

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
+ ```