Je pensais que je commencerais python, eh bien, après tout
print("Hello world")
Ouais bien.
print ("japonais")
Traceback (most recent call last):
File "/tmp/a.py", line 1, in <module>
print("\u65e5\u672c\u8a9e");
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
:cry: :-1:
Après de nombreuses recherches, j'ai trouvé que je devais convertir entre unicode et byte.
print (.encode "japonais" ("utf-8"))
b'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'
Non, ce n'est pas le cas.
setenv LANG ja_JP.UTF-8
Japonais
Eh bien, cela a fonctionné. Mais il y a plus de problèmes!
Lorsque vous démarrez cron, le processus parent est cron, il hérite donc naturellement de l'environnement cron. C'est l'histoire du type de paramètres régionaux définis pour l'ensemble du système. Cependant, étant donné que la politique de l'ensemble du système est unifiée avec le C de base (lorsque ls ou la date est définie sur le format de locale japonais, diverses choses ne fonctionnent pas), l'environnement cron est naturellement LANG = C. Cela ne peut pas être changé.
Pour démarrer le script, écrivez #! / Usr / local / bin / python3
sur la première ligne. Il y a plusieurs façons d'appeler cela, mais cela semble être du shebang. Ainsi, ce que l'on appelle par là ne peut pas utiliser le shebang deux fois. En d'autres termes, lorsque #! / Usr / local / bin / foo
, la première ligne de / usr / local / bin / foo ne doit pas être #! / Usr / local / bin / bar
. .. Je ne savais pas ça. Vous appelez peut-être une série de fonctions exec () dans un appel système.
L'idée de transformer / usr / local / bin / python3 en un script shell était frustrante, je l'ai donc écrite en C.
python3.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv){
putenv("LANG=ja_JP.UTF-8");
argv[0] = "/usr/local/bin/python3.5";
argv[argc] = NULL;
execv("/usr/local/bin/python3.5",argv);
}
Maintenant, cela ne fonctionne qu'avec le premier print (" japonais ")
. (Je n'ai plus besoin d'encoder)
python3 n'est plus un lien symbolique, mais c'est une contre-mesure forcée, alors soyez patient.
En quelque sorte résolu. La route vers Pythonista est raide
Recommended Posts