Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2013 13:11:33

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

Идея такова: “повесить” скрипт на кнопку панели инструменов в Total Commander, что бы он исполнялся с параметром, который являет собой путь файла под курсором. Передать путь не проблема, в Тотале есть переменная %Р для этого. В Питоне используем sys.argv. Вопрос в том, как привести строку к виду, требуемому в Питоне. К тому же, скорее всего, надо перекодировать русские имена папок.

Отредактировано Lion1971 (Июль 15, 2013 13:16:28)

Офлайн

#2 Июль 15, 2013 14:58:46

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

Уточню. В Тотале это выглядит так

скрипт тестовый

# -*- coding: cp866 -*-
import sys, os
s=sys.argv[1]
print s
#input()
если курсор Тотала в папке типа d:\tmp\proba proba\, то скрипт выводит только d:\tmp\proba. Как добиться правильного решения?

Офлайн

#3 Июль 15, 2013 15:16:41

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

Сам себе отвечаю по ходу
Пробел в имени папки воспринимается как разделитель параметров.
Изменил немного скрипт

# -*- coding: cp866 -*-
import sys, os
s=sys.argv
s.remove(sys.argv[0])
print s
input()
вывод типа такого:
параметр d:\Сайт\День родини\
дает
['d:\\\xd1\xe0\xe9\xf2\\\xc4\xe5\xed\xfc', '\xf0\xee\xe4\xe8\xed\xe8\\']
теперь из этого списка нужно собрать строку с правильно расставленными пробелами и слэшами.
Какие идеи? Или я не по тому пути пошел?

Отредактировано Lion1971 (Июль 15, 2013 15:17:06)

Офлайн

#4 Июль 15, 2013 17:08:18

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

Поробуйте заменить

print s
на
for path in s:
    print path



Офлайн

#5 Июль 16, 2013 00:12:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

Lion1971

' '.join(s)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Июль 16, 2013 10:20:04

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

скрипт - тестовый, реальная задача - сформировать строку, содержащую путь к файлу, который находится под курсором ТС. Эту строку потом можо использовать в функции обработки содержимого католога.

Офлайн

#7 Июль 16, 2013 16:25:58

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

' '.join(s)
так работает, вот только с кириллицей в именах папок беда.
скрипт срабатывает в консоли, а там кодировка СР866.

Отредактировано Lion1971 (Июль 16, 2013 16:41:38)

Офлайн

#8 Июль 16, 2013 22:20:50

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

' '.join(s).decode("cp1251").encode("cp866")



Офлайн

#9 Июль 18, 2013 15:38:04

Lion1971
Зарегистрирован: 2013-07-13
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

sp3
' '.join(s).decode("cp1251").encode("cp866")
не хочет

Офлайн

#10 Июль 18, 2013 17:25:42

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Запуск скрипта с параметрами из Total Commander

А если в начале скрипта вставить

import locale
import codecs
locale.setlocale(locale.LC_ALL, '')
encoding = locale.getlocale()[1]
if not encoding:
    encoding = locale.getpreferredencoding()
import sys
reload(sys)
sys.setdefaultencoding(encoding)
sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors="replace")
sys.stderr = codecs.getwriter(encoding)(sys.stderr, errors="replace")
?
Мопед не мой.

Отредактировано Shaman (Июль 18, 2013 17:26:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version