바이너리 경로로 환경을 설정해야합니다. 셸 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
행운을 빕니다!
답변
답변
다음과 같은 것을 시도 할 수 있습니다.
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