2017-01-05 2 views
3

msys2-Python(3.4.3)の中で、msys-filesystemからいくつかのファイルのネイティブウィンドウパスを取得する方法を教えてください。どのようにmsysのpython内のネイティブウィンドウパスを取得するには?

ネイティブWindowsアプリケーション用の設定ファイルを書き、msysパスの書き換えが考慮されないようにします。

私は貝に不明なパスを供給する必要があるので、そこのソリューションですが、私はそれを好きではない:

path = "/home/user/workspace" 
output = subprocess.check_output('cmd //c echo ' + path, shell = True) 

これはC:/msys64/home/user/workspaceを返します。

msys2であるため、この質問は実際にはConvert POSIX->WIN path, in Cygwin Python, w/o calling cygpathの重複ではありません。

+0

https://stackoverflow.com/questions/10884268/convert-posix-win-path-in-cygwin-python-w-o-calling-cygpath –

答えて

1

実行cygpath -w NAMEcygpathは、他のコマンドラインユーティリティと同じ方法で実行できるコマンドラインユーティリティ/usr/binです。出力は、渡されたNAME引数に対応するWindowsスタイルのパスになります。

0

https://stackoverflow.com/a/38471976/5892524この偉大な答えに基づいてここでは、msys2内で使用されるように書き直された同じコードです。

import ctypes 
import sys 

xunicode = str if sys.version_info[0] > 2 else eval("unicode") 

# If running under Msys2 Python, just use DLL name 
# If running under non-Msys2 Windows Python, use full path to msys-2.0.dll 
# Note Python and msys-2.0.dll must match bitness (i.e. 32-bit Python must 
# use 32-bit msys-2.0.dll, 64-bit Python must use 64-bit msys-2.0.dll.) 
msys = ctypes.cdll.LoadLibrary("msys-2.0.dll") 
msys_create_path = msys.cygwin_create_path 
msys_create_path.restype = ctypes.c_void_p 
msys_create_path.argtypes = [ctypes.c_int32, ctypes.c_void_p] 

# Initialise the msys DLL. This step should only be done if using 
# non-msys Python. If you are using msys Python don't do this because 
# it has already been done for you. 
if sys.platform != "msys": 
    msys_dll_init = msys.msys_dll_init 
    msys_dll_init.restype = None 
    msys_dll_init.argtypes = [] 
    msys_dll_init() 

free = msys.free 
free.restype = None 
free.argtypes = [ctypes.c_void_p] 

CCP_POSIX_TO_WIN_A = 0 
CCP_POSIX_TO_WIN_W = 1 
CCP_WIN_A_TO_POSIX = 2 
CCP_WIN_W_TO_POSIX = 3 

def win2posix(path): 
    """Convert a Windows path to a msys path""" 
    result = msys_create_path(CCP_WIN_W_TO_POSIX, xunicode(path)) 
    if result is None: 
     raise Exception("msys_create_path failed") 
    value = ctypes.cast(result, ctypes.c_char_p).value 
    free(result) 
    return value 

def posix2win(path): 
    """Convert a msys path to a Windows path""" 
    result = msys_create_path(CCP_POSIX_TO_WIN_W, str(path)) 
    if result is None: 
     raise Exception("msys_create_path failed") 
    value = ctypes.cast(result, ctypes.c_wchar_p).value 
    free(result) 
    return value 
関連する問題