[python] 실행 파일의 경로를 어떻게 찾을 수 있습니까?

바이너리 경로로 환경을 설정해야합니다. 셸 which에서 경로를 찾는 데 사용할 수 있습니다 . 파이썬에 상응하는 것이 있습니까? 이것은 내 코드입니다.

cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True



답변


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 Python 3.3 이상을 사용하는 경우 shutil.which(cmd). 여기 에서 설명서를 찾을 수 있습니다 . 표준 라이브러리에 있다는 장점이 있습니다.

예는 다음과 같습니다.

>>> import shutil
>>> shutil.which("bash")
'/usr/bin/bash'


답변

이를 수행하는 명령은 없지만 반복 environ["PATH"]해서 파일이 존재하는지 확인할 which수 있습니다. 실제로 수행하는 작업입니다.

import os

def which(file):
    for path in os.environ["PATH"].split(os.pathsep):
        if os.path.exists(os.path.join(path, file)):
                return os.path.join(path, file)

    return None

행운을 빕니다!


답변

( 비슷한 질문 )

Twisted 구현 참조 : twisted.python.procutils.which


답변

다음과 같은 것을 시도 할 수 있습니다.

import os
import os.path
def which(filename):
    """docstring for which"""
    locations = os.environ.get("PATH").split(os.pathsep)
    candidates = []
    for location in locations:
        candidate = os.path.join(location, filename)
        if os.path.isfile(candidate):
            candidates.append(candidate)
    return candidates


답변

을 사용하면 shell=True명령이 시스템 셸을 통해 실행되며 경로에서 바이너리를 자동으로 찾습니다.

p = subprocess.Popen("abc", stdout=subprocess.PIPE, shell=True)


답변

이는 파일이 존재하는지뿐만 아니라 실행 가능한지 확인하는 which 명령과 동일합니다.

import os

def which(file_name):
    for path in os.environ["PATH"].split(os.pathsep):
        full_path = os.path.join(path, file_name)
        if os.path.exists(full_path) and os.access(full_path, os.X_OK):
            return full_path
    return None