質問編集履歴

4

追記

2020/04/26 17:56

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

test CHANGED
File without changes
test CHANGED
@@ -158,6 +158,8 @@
158
158
 
159
159
  `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
160
160
 
161
+ PHPは元のソースコードのままです。
162
+
161
163
  ```Python
162
164
 
163
165
  # -*- coding: utf-8 -*-
@@ -196,6 +198,28 @@
196
198
 
197
199
  ---
198
200
 
201
+ **PHP側で環境変数を操作する方法**
202
+
203
+ `putenv("PYTHONIOENCODING=utf-8");`を挿入しました。
204
+
205
+ Pythonは元のソースコードのままです。上の**Python側で環境変数を操作する方法**のソースコードではありません。
206
+
207
+ ```PHP
208
+
209
+ <?php
210
+
211
+ putenv("PYTHONIOENCODING=utf-8");
212
+
213
+ $command="/usr/bin/python3 test.py";
214
+
215
+ exec($command,$output);
216
+
217
+ ?>
218
+
219
+ ```
220
+
221
+ ---
222
+
199
223
  **Apacheの実行ユーザを変更**
200
224
 
201
225
  `etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。

3

追記及び訂正

2020/04/26 17:56

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  csvWriter.writerow(data)
56
56
 
57
- csvWriter.close(data)
57
+ f.close(data)
58
58
 
59
59
  except Exception as e:
60
60
 
@@ -145,3 +145,97 @@
145
145
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
146
146
 
147
147
  ```
148
+
149
+
150
+
151
+ ### 追記③
152
+
153
+ ※いずれもエラーは解消されませんでした
154
+
155
+
156
+
157
+ **Python側で環境変数を操作する方法**
158
+
159
+ `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
160
+
161
+ ```Python
162
+
163
+ # -*- coding: utf-8 -*-
164
+
165
+ import csv
166
+
167
+ import sys
168
+
169
+ import io
170
+
171
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
172
+
173
+ data=["aaa", "bbb", "ccc"]
174
+
175
+ try:
176
+
177
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
178
+
179
+ csvWriter = csv.writer(f)
180
+
181
+ csvWriter.writerow(data)
182
+
183
+ f.close(data)
184
+
185
+ except Exception as e:
186
+
187
+ error_log = open('error.log', 'w')
188
+
189
+ error_log.write(str(e))
190
+
191
+ error_log.close()
192
+
193
+ raise
194
+
195
+ ```
196
+
197
+ ---
198
+
199
+ **Apacheの実行ユーザを変更**
200
+
201
+ `etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。
202
+
203
+ カレントディレクトリに出力されるエラーログの所有者が`www-data`から'SSH実行ユーザ'へ変更されていたので定義は正常に変更できたものと思われます。
204
+
205
+
206
+
207
+ ---
208
+
209
+ **訂正**
210
+
211
+ 質問に直接的な影響は無いのですが、元のソースコードのCSVファイルを閉じる部分の**最終行**。
212
+
213
+ ```Python
214
+
215
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
216
+
217
+ csvWriter = csv.writer(f)
218
+
219
+ csvWriter.writerow(data)
220
+
221
+ csvWriter.close(data)
222
+
223
+ ```
224
+
225
+ とあったのですが、正しくは
226
+
227
+ ```Python
228
+
229
+ f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
230
+
231
+ csvWriter = csv.writer(f)
232
+
233
+ csvWriter.writerow(data)
234
+
235
+ f.close(data) //この行を変更
236
+
237
+ ```
238
+
239
+ でした。エラー該当箇所が今回の訂正箇所より前にあるためプログラムが強制終了してしまい影響は無いのですが一応訂正です。
240
+
241
+ 本文ソースコードは既に訂正されています。

2

追記2

2020/04/26 17:53

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,41 @@
107
107
  $command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
108
108
 
109
109
  ```
110
+
111
+
112
+
113
+ ### 追記②
114
+
115
+ index.phpを以下のように編集しましたが、依然同じエラーです。
116
+
117
+ ```PHP
118
+
119
+ $locale='ja_JP.UTF-8';
120
+
121
+ setlocale(LC_ALL,$locale);
122
+
123
+ putenv('LC_ALL='.$locale);
124
+
125
+
126
+
127
+ $command="/usr/bin/python3 test.py";
128
+
129
+ exec($command,$output);
130
+
131
+ ```
132
+
133
+
134
+
135
+ また、Apacheのエラーログに少し詳細な情報が記録されていました。
136
+
137
+ ```Error
138
+
139
+ Traceback (most recent call last):
140
+
141
+ File "test.py", line 12, in <module>
142
+
143
+ f = open("\u65e5\u672c\u8a9e\u306e\u30d5\u30a1\u30a4\u30eb\u540d000.csv", 'a',newline = "" ,encoding='utf-8')
144
+
145
+ UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
146
+
147
+ ```

1

追記

2020/04/26 16:13

投稿

Y.NINOMIYA
Y.NINOMIYA

スコア32

test CHANGED
File without changes
test CHANGED
@@ -85,3 +85,25 @@
85
85
 
86
86
 
87
87
  よろしくお願いします。
88
+
89
+
90
+
91
+ ### 追記①
92
+
93
+ PHPのexec関数の引数を以下の2つで試してみましたがエラーは同じでした。
94
+
95
+
96
+
97
+ ```PHP
98
+
99
+ $command="LANG=ja_JP.UTF-8 /usr/bin/python3 test.py"
100
+
101
+ ```
102
+
103
+
104
+
105
+ ```PHP
106
+
107
+ $command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
108
+
109
+ ```