Как я могу определить (в сценарии Python или в любой другой среде сценариев), является ли программа, которую я должен вызвать, исполняемым файлом Windows или скомпилированным с помощью cygwin1.dll. Я в среде cygwin для этого.
2 ответа
3
Если вы находитесь в среде cygwin, вы можете использовать команду ldd , она вернет зависимости исполняемого файла, смотрите:
- Зависимости ls.exe, cygwin1.dll это зависимость
$ ldd /bin/ls.exe
ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3e8b40000)
cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3f2300000)
- Зависимости C:/Windows/System32/control.exe, cygwin1.dll не является зависимостью
$ ldd c:/Windows/System32/control.exe
ntdll.dll => /mnt/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd413d0000)
KERNEL32.DLL => /mnt/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd40af0000)
KERNELBASE.dll => /mnt/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd3e570000)
ADVAPI32.dll => /mnt/c/WINDOWS/System32/ADVAPI32.dll (0x7ffd40d30000)
msvcrt.dll => /mnt/c/WINDOWS/System32/msvcrt.dll (0x7ffd40520000)
[...]
Вы также можете выполнить следующую строку:
ldd $PROGRAM | grep cygwin1.dll | wc -l
Он вернет 1, если $ PROGRAM содержит зависимость с cygwin1.dll
1
Используйте инструмент оболочки 'cygpath', чтобы найти полный путь к исполняемому файлу в стиле cygwin. Затем определите, с чего начинается этот путь.
У меня нет Cygwin, чтобы проверить это; поэтому нет примера.
