Форум сайта python.su
Есть командная строка commandLine типа QVariant. Мне необходимо асинхронно (не ожидая результата) запустить приложение (новый, независимый процесс). Необходимо сделать это кросс-платформенно. Вот так, конечно же, не работает:
params = commandLine.split(' ')
os.spawnv(os.P_NOWAIT, params[0], params)
Офлайн
Пример, пригодный для запуска:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from PyQt4 import QtCore
commandLine = QtCore.QVariant('gedit "~/test.txt"')
commandLine = commandLine.toString()
params = commandLine.split(' ')
os.spawnv(os.P_NOWAIT, params[0], params)
Офлайн
unicode(commandLine.toString()).split(' ')
Дело в том, что PyQt пытается самостоятельно конвертировать из str/unicode в QString и обратно всегда, когда только возможно при передаче аргументов в функцию, но как результат выполнения Qt-шной функции всегда возвращается QString, а не str/unicode.
Отредактировано (Ноя. 21, 2008 13:55:00)
Офлайн
poltergeistЭто спасает, но не до конца. Русские имена файлов не прокатывают:
unicode(commandLine.toString()).split(' ')
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
from PyQt4 import QtCore
commandLine = QtCore.QVariant('C:/WINDOWS/notepad.exe C:/Temp/файл.txt')
params = unicode(commandLine.toString()).split(' ')
os.spawnv(os.P_NOWAIT, params[0], params)
Офлайн
poltergeistИменно в этом и проблема - как правильно преобразовать QString к “обычным” юникодным строкам. В инете не нашёл ничего, кроме советов применять функции str() или unicode(). Но они не помогают, если в строке есть кириллица.
…как результат выполнения Qt-шной функции всегда возвращается QString, а не str/unicode.
Отредактировано (Ноя. 21, 2008 15:09:50)
Офлайн
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
text = u'Доказательство'
print repr(text)
qtext = unicode(QtCore.QString(text))
print repr(qtext)
Вывод:
u'\u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e'
u'\u0414\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e'
Офлайн
Я ошибся, забыл “u” перед исходной строкой поставить. Всё работает.
poltergeist, спасибо большое!
Офлайн