which abc
コマンドを実行して環境をセットアップする必要があります。 which
コマンドのPython同等の機能はありますか? これは私のコードです。'これはPythonの同等の機能です
cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True
which abc
コマンドを実行して環境をセットアップする必要があります。 which
コマンドのPython同等の機能はありますか? これは私のコードです。'これはPythonの同等の機能です
cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True
ありそれを行うためのコマンドはありませんが、あなたは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
幸運を祈る!
あなたはpathsep文字について前提を作ることに注意したい。 –
とパス区切り記号ですが、これはポイントを作るためのちょっとした話です。がんばろう! –
':'の代わりに '/'と 'os.pathsep'の代わりに' os.path.sep'を使います。 – djhaskin987
は、次のような何かを試みることができる:ツイスト実装を参照してください
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'も考慮する必要があります – orip
Windowsマシンでは、拡張子を仮定するのではなく、ファイルの正確な名前を探すと思われます。そう言えば、PATHEXTのメンバーを反復する内部ループを追加することは難しくありません。 –
あなたがshell=True
を使用する場合は、あなたのコマンドは、システムを介して実行されますシェルは自動的にパス上のバイナリを見つけます:
p = subprocess.Popen("abc", stdout=subprocess.PIPE, shell=True)
'shell = True'を指定しなくても、パス内で検索されますが、可能なコマンドがどれかを見つけたい場合は役に立ちません。 –
これは古い質問ですが、Python 3.3以降を使用している場合はshutil.which(cmd)
を使用できます。文書hereがあります。標準ライブラリにあるという利点があります。
例はそうのようになる:
>>> import shutil
>>> shutil.which("bash")
'/usr/bin/bash'
これはどのコマンドに相当し、これだけではないチェックファイルが存在する場合だけでなく、それが実行可能であるかどうか:
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
でもシェル自体では、 'which'自体は、コマンドがインストールされているかどうかを検出するための良い選択ではありません。 [参照](http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212) – kojiro