Comment utiliser psutil.Popen avec des commandes unicode sur Python 2

Hey j’essaye d’exécuter la commande suivante (en utilisant psutil.Popen avec python 2.7):

"C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" "C:\docs\ת.xlsm" 

En utilisant ce code:

 dir = u"C:\\docs" doc = os.listdir(dir)[0] full_path = os.path.join(dir, doc) command = u"\"C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE\" \"{}\"".format(full_path) process = psutil.Popen(command) 

Mais je reçois cette exception:

  process = psutil.Popen(command) File "C:\Python27\lib\site-packages\psutil\__init__.py", line 1370, in __init__ self.__subproc = subprocess.Popen(*args, **kwargs) File "C:\Python27\lib\subprocess.py", line 390, in __init__ errread, errwrite) File "C:\Python27\lib\subprocess.py", line 640, in _execute_child startupinfo) UnicodeEncodeError: 'ascii' codec can't encode character u'\u05ea' in position 102: ordinal not in range(128) 

J’ai trouvé cette question connexe: subprocess.Popen avec un chemin unicode . Mais chaque réponse donnée ne fonctionne pas pour moi.

En utilisant subprocess.Popen (command.encode (locale.getpreferredencoding ())) , lève l’exception suivante:

 Traceback (most recent call last): File "scanner_watcher.py", line 53, in _execute self.scanner.execute(path) File "scanner_watcher.py", line 356, in execute self._execute(file_path) File "scanner_watcher.py", line 201, in _execute self.open_scanner(file_path, file_package) File "scanner_watcher.py", line 287, in open_scanner self.scanner_process = psutil.Popen(command.encode(locale.getpreferredencoding())) File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode character u'\u05ea' in position 102: character maps to  

L’utilisation de path.encode (‘mbcs’) transforme tous les caractères Unicode en points d’interrogation.

Je ne veux pas utiliser os.startfile parce que je dois utiliser différentes commandes sur le programme, puis gérer le processus ouvert (lorsque le fichier os.startfile ne le permet pas).

J’ai trouvé ce Popen modifié: https://gist.github.com/vaab/2ad7051fc193167f15f85ef573e54eb9 Mais ce code n’a pas été testé de manière approfondie.

Est-il possible d’utiliser Popen avec une commande Unicode dans python 2.7?

Merci.

Le problème est votre utilisation de guillemets doubles lors de la définition de la command . La façon dont il est écrit divise l’instruction en plusieurs chaînes au mauvais endroit. En remplaçant les guillemets simples et finaux par des guillemets simples (open and close of ssortingng), le problème a été résolu pour moi.

command = u'\"C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE\" \"{}\"'.format(full_path)