Как эффективно преобразовать путь POSIX в путь Windows с Python в Cygwin? - PullRequest
0 голосов
/ 17 января 2019

Задача

Представьте, что вы пишете скрипт на Python, который работает на cygwin и вызывает внешний исполняемый файл C #, для которого в качестве входных данных требуется путь. Предположим, вы не можете изменить исполняемый файл C # любым способом. Когда вы отправляете требуемый путь к исполняемому файлу, он отклоняет все пути cygwin.

Таким образом, если вы передадите путь /cygdrive/c/location/of/file.html в качестве пути POSIX, он потерпит неудачу, так как для исполняемого файла требуется путь Windows, такой как C:\location\of\file.html

Пример:

Message location = os.path.dirname(os.path.realpath(__file__)) os.system('./cSharpScript.exe ' + message_location)

Результатом будет:

File for the content (/cygdrive/c/location/of/file.html) not found.

То, что я пробовал до сих пор:

PATH = /cygdrive/c/location/of/file.html

1) path = PATH.replace('/','\\')

Результат: File for the content (cygdriveclocationoffile.html) not found.

2) path = os.path.abspath(PATH)

Результат: File for the content (/cygdrive/c/location/of/file.html) not found.

  • os.path.realpath имеет те же результаты

С моими решениями я, вероятно, пока иду в совершенно неправильном направлении ... Как бы вы справились?

1 Ответ

0 голосов
/ 17 января 2019

Согласно [Cygwin]: cygpath :

cygpath - Преобразование путей в формате Unix и Windows или вывод информации о системных путях
...

-w, --windows         print Windows form of NAMEs (C:\WINNT)

Пример:

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054237800]> cygpath.exe -w /cygdrive/c/location/of/file.html
C:\location\of\file.html

Переведено на Python ( это грубая версия, только для демонстрационных целей ):

>>> import subprocess
>>>
>>>
>>> def get_win_path(cyg_path):
...     return subprocess.check_output(["cygpath", "-w", cyg_path]).strip(b"\n").decode()
...
>>>
>>> print(get_win_path("/cygdrive/c/location/of/file.html"))
C:\location\of\file.html
...