바이너리 경로로 환경을 설정해야합니다. 셸 which에서 경로를 찾는 데 사용할 수 있습니다 . 파이썬에 상응하는 것이 있습니까? 이것은 내 코드입니다.
cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True
바이너리 경로로 환경을 설정해야합니다. 셸 which에서 경로를 찾는 데 사용할 수 있습니다 . 파이썬에 상응하는 것이 있습니까? 이것은 내 코드입니다.
cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True
답변:
PATH통해 확인할 수 있음)을 찾지 못합니다 where.exe.
import distutils.spawn먼저 실행하는 것을 잊지 마십시오 .
이를 수행하는 명령은 없지만 반복 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
행운을 빕니다!
os.path.sep대신 /하고 os.pathsep대신:
( 비슷한 질문 )
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
PATHEXT뿐만 아니라 고려
을 사용하면 shell=True명령이 시스템 셸을 통해 실행되며 경로에서 바이너리를 자동으로 찾습니다.
p = subprocess.Popen("abc", stdout=subprocess.PIPE, shell=True)
shell=True그것은 경로에 조회됩니다,하지만 당신은 존재 가능한 명령하는 찾으려는 경우는 도움이되지 않습니다.
다음은 이전 답변의 한 줄 버전입니다.
import os
which = lambda y: next(filter(lambda x: os.path.isfile(x) and os.access(x,os.X_OK),[x+os.path.sep+y for x in os.getenv("PATH").split(os.pathsep)]),None)
이렇게 사용 :
>>> which("ls")
'/bin/ls'
TypeError: list object is not an iterator.
which명령이 설치되어 있는지 감지하는 데 적합하지 않습니다. 참조