質問編集履歴
4
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -78,6 +78,7 @@
|
|
78
78
|
|
79
79
|
**Python側で環境変数を操作する方法**
|
80
80
|
`sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
|
81
|
+
PHPは元のソースコードのままです。
|
81
82
|
```Python
|
82
83
|
# -*- coding: utf-8 -*-
|
83
84
|
import csv
|
@@ -97,6 +98,17 @@
|
|
97
98
|
raise
|
98
99
|
```
|
99
100
|
---
|
101
|
+
**PHP側で環境変数を操作する方法**
|
102
|
+
`putenv("PYTHONIOENCODING=utf-8");`を挿入しました。
|
103
|
+
Pythonは元のソースコードのままです。上の**Python側で環境変数を操作する方法**のソースコードではありません。
|
104
|
+
```PHP
|
105
|
+
<?php
|
106
|
+
putenv("PYTHONIOENCODING=utf-8");
|
107
|
+
$command="/usr/bin/python3 test.py";
|
108
|
+
exec($command,$output);
|
109
|
+
?>
|
110
|
+
```
|
111
|
+
---
|
100
112
|
**Apacheの実行ユーザを変更**
|
101
113
|
`etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。
|
102
114
|
カレントディレクトリに出力されるエラーログの所有者が`www-data`から'SSH実行ユーザ'へ変更されていたので定義は正常に変更できたものと思われます。
|
3
追記及び訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
|
27
27
|
csvWriter = csv.writer(f)
|
28
28
|
csvWriter.writerow(data)
|
29
|
-
|
29
|
+
f.close(data)
|
30
30
|
except Exception as e:
|
31
31
|
error_log = open('error.log', 'w')
|
32
32
|
error_log.write(str(e))
|
@@ -71,4 +71,51 @@
|
|
71
71
|
File "test.py", line 12, in <module>
|
72
72
|
f = open("\u65e5\u672c\u8a9e\u306e\u30d5\u30a1\u30a4\u30eb\u540d000.csv", 'a',newline = "" ,encoding='utf-8')
|
73
73
|
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
|
74
|
-
```
|
74
|
+
```
|
75
|
+
|
76
|
+
### 追記③
|
77
|
+
※いずれもエラーは解消されませんでした
|
78
|
+
|
79
|
+
**Python側で環境変数を操作する方法**
|
80
|
+
`sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`を挿入しました。
|
81
|
+
```Python
|
82
|
+
# -*- coding: utf-8 -*-
|
83
|
+
import csv
|
84
|
+
import sys
|
85
|
+
import io
|
86
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
87
|
+
data=["aaa", "bbb", "ccc"]
|
88
|
+
try:
|
89
|
+
f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
|
90
|
+
csvWriter = csv.writer(f)
|
91
|
+
csvWriter.writerow(data)
|
92
|
+
f.close(data)
|
93
|
+
except Exception as e:
|
94
|
+
error_log = open('error.log', 'w')
|
95
|
+
error_log.write(str(e))
|
96
|
+
error_log.close()
|
97
|
+
raise
|
98
|
+
```
|
99
|
+
---
|
100
|
+
**Apacheの実行ユーザを変更**
|
101
|
+
`etc/apache2/apache2.conf`を編集し、Apacheの実行ユーザを`www-data`から'SSH実行ユーザ'へ変更しました。
|
102
|
+
カレントディレクトリに出力されるエラーログの所有者が`www-data`から'SSH実行ユーザ'へ変更されていたので定義は正常に変更できたものと思われます。
|
103
|
+
|
104
|
+
---
|
105
|
+
**訂正**
|
106
|
+
質問に直接的な影響は無いのですが、元のソースコードのCSVファイルを閉じる部分の**最終行**。
|
107
|
+
```Python
|
108
|
+
f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
|
109
|
+
csvWriter = csv.writer(f)
|
110
|
+
csvWriter.writerow(data)
|
111
|
+
csvWriter.close(data)
|
112
|
+
```
|
113
|
+
とあったのですが、正しくは
|
114
|
+
```Python
|
115
|
+
f = open("日本語のファイル名000.csv", 'a',newline = "" ,encoding='utf-8')
|
116
|
+
csvWriter = csv.writer(f)
|
117
|
+
csvWriter.writerow(data)
|
118
|
+
f.close(data) //この行を変更
|
119
|
+
```
|
120
|
+
でした。エラー該当箇所が今回の訂正箇所より前にあるためプログラムが強制終了してしまい影響は無いのですが一応訂正です。
|
121
|
+
本文ソースコードは既に訂正されています。
|
2
追記2
title
CHANGED
File without changes
|
body
CHANGED
@@ -52,4 +52,23 @@
|
|
52
52
|
|
53
53
|
```PHP
|
54
54
|
$command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
|
55
|
+
```
|
56
|
+
|
57
|
+
### 追記②
|
58
|
+
index.phpを以下のように編集しましたが、依然同じエラーです。
|
59
|
+
```PHP
|
60
|
+
$locale='ja_JP.UTF-8';
|
61
|
+
setlocale(LC_ALL,$locale);
|
62
|
+
putenv('LC_ALL='.$locale);
|
63
|
+
|
64
|
+
$command="/usr/bin/python3 test.py";
|
65
|
+
exec($command,$output);
|
66
|
+
```
|
67
|
+
|
68
|
+
また、Apacheのエラーログに少し詳細な情報が記録されていました。
|
69
|
+
```Error
|
70
|
+
Traceback (most recent call last):
|
71
|
+
File "test.py", line 12, in <module>
|
72
|
+
f = open("\u65e5\u672c\u8a9e\u306e\u30d5\u30a1\u30a4\u30eb\u540d000.csv", 'a',newline = "" ,encoding='utf-8')
|
73
|
+
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
|
55
74
|
```
|
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,4 +41,15 @@
|
|
41
41
|
Ubuntu 18.04.4 LTS
|
42
42
|
コードの編集はWinSCPから行っており、環境設定のデフォルト文字コードはUTRF-8に設定されています。
|
43
43
|
|
44
|
-
よろしくお願いします。
|
44
|
+
よろしくお願いします。
|
45
|
+
|
46
|
+
### 追記①
|
47
|
+
PHPのexec関数の引数を以下の2つで試してみましたがエラーは同じでした。
|
48
|
+
|
49
|
+
```PHP
|
50
|
+
$command="LANG=ja_JP.UTF-8 /usr/bin/python3 test.py"
|
51
|
+
```
|
52
|
+
|
53
|
+
```PHP
|
54
|
+
$command="PYTHONIOENCODING=UTF-8 /usr/bin/python3 test.py"
|
55
|
+
```
|