Персональные инструменты
 

Cygwin:Вызов Windows утилит

Материал из CustisWiki

Версия от 22:05, 20 апреля 2006; BenderBot (обсуждение | вклад) (реплицировано из внутренней CustisWiki)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

При всех своих замечательных свойствах, Cygwin не является полноценной Windows-системой. Поэтому, часто радость отладки крупных систем, омрачается тем, что некоторые утилиты, используемые в них, собрать под Cygwinном не удается. Например, множество веб-систем используют утилиты из пакета Graphviz, а корректно собрать Graphviz (версий >=1.9) под Cygwin весьма сложно, и даже собранный может вести себя весьма непредсказуемо (проблемы с шрифтами и т. п.). С другой стороны, зачастую такие утилиты поставляются собранными и оттестированными, как консольные Windows-приложения. Единственная, но серьезная проблема — Windows-приложения не понимают Cygwiновских Unix-путей («/var/www/», «/usr/local» и т. п.). «По уму», эту проблему можно решать с помощью использования утилиты cygpath, но гораздо проще воспользоваться небольшим «эвристическим» с скриптом на питоне (Python входит в дистрибутив Cygwinа.).

#!/usr/bin/python
# -*- coding: windows−1251 -*-
#
# Данный файл представляет собой скрипт на питоне, предназначенный 
# для вызова внешних Windows-утилит из Cygwin.
# Основной решаемой проблемой является преобразование аргументов
# содержащих файловые пути, из формы 
# /usr/local/.. на c:/cygwin/usr/local
#
 
import fileinput
import string
import re
import os
import sys
import shutil 
 
newarg=[]
for ls_arg in sys.argv[1:]:
    ls_newarg=ls_arg
    for ls_ref in re.findall('(/usr/local|/usr/bin|/usr/share|/var/www|/var/log)',ls_arg):     
        ls_newarg=string.replace(ls_newarg,ls_ref,"c:/cygwin"+ls_ref)
    newarg.append(ls_newarg)    
 
ls_str=""
for ls_arg in newarg:
  ls_str=ls_str+" "+ls_arg+" "
 
os.system(ls_str)

Далее, требуемую утилиту, например «dot», заменяем следующим shell-скриптом:

#!/usr/bin/bash
moscowcalling.py c:/app/ATT/Graphviz/bin/dot.exe $@

Репликация: База Знаний «Заказных Информ Систем» → «Cygwin:Вызов Windows утилит»

Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».