2009-11-26 8 views
0

J'ai besoin de contrôler un programme en envoyant des commandes en encodage utf-8 à son entrée standard. Pour cela, je lance le programme en utilisant subprocess.Popen():communiquer avec un processus dans utf-8 sur une console cp1252

proc = Popen("myexecutable.exe", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) 
proc.stdin.write(u'ééé'.encode('utf_8')) 

Si je lance ce à partir d'une console Cygwin utf-8, cela fonctionne. Si je l'exécute à partir d'une console Windows (encoding = 'cp1252') cela ne fonctionne pas. Y at-il un moyen de faire ce travail sans avoir à installer une console cygwin utf-8 sur chaque ordinateur que je veux qu'il fonctionne? (NB: Je ne pas besoin de quoi que ce soit de sortie à la console)

+0

Je ne suis pas sûr de comprendre. La console Windows ne peut pas gérer Unicode. Comment comptez-vous le forcer à le gérer? –

+0

Vous avez raison, mais comme je n'ai pas besoin de la console Windows, j'aimerais savoir si je pourrais exécuter mes programmes en dehors de la console Windows et les faire communiquer ensemble dans utf-8. En effet, je n'ai pas besoin de sortir quoi que ce soit sur la console. – Mapad

Répondre

0

Je me demande si cette mise en garde, de la subprocess documentation, est pertinent:

La seule raison pour laquelle vous devez spécifier shell = True sur Windows est l'endroit où la commande que vous souhaitez exécuter est réellement intégrée au shell, par exemple dir, copy. Vous n'avez pas besoin de shell = True pour exécuter un fichier batch, ni pour exécuter un exécutable basé sur la console.

+0

Enlever shell = True ne résout pas le problème – Mapad

0

Pourquoi avez-vous besoin de forcer des tuyaux utf-8? Ne pourriez-vous pas faire quelque chose comme

import sys 
current_encoding = sys.stdout.encoding 
... 
proc.stdin.write(u'ééé'.encode(current_encoding)) 

EDIT: J'ai écrit cette réponse avant de modifier votre question. Je suppose que ce n'est pas ce que vous cherchez, n'est-ce pas?

+0

Merci pour votre réponse, mais je veux forcer 'myexecutable.exe' à supporter utf-8 comme entrée standard. Je suppose que ce n'est pas possible – Mapad