Как я могу определить (в сценарии 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, чтобы проверить это; поэтому нет примера.