Pythonサブプロセスで 'command'コマンドが見つかりません。

Pythonサブプロセスで 'command'コマンドが見つかりません。

Pythonスクリプトで次のコマンドを使用できませcommandんでした。

import subprocess

subprocess.run(["command", "-v", "yes"])

そして次に続く

Traceback (most recent call last):
  File "command_test.py", line 3, in <module>
    subprocess.run(["command", "-v", "yes"])
  File "/usr/lib/python3.5/subprocess.py", line 383, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'command'

シェル(zsh)は期待どおりに機能します。

$ command -v yes         
/usr/bin/yes

commandPythonサブプロセスでどのように使用しますか?いくつかの追加パッケージをインストールする必要がありますか?

環境:

Python 3.5.3とzsh 5.3.1を含むDebian 9(拡張)

答え1

commandこれはシェルに組み込まれたコマンドなので、ファイルシステム内の独自のオブジェクトではありません。

man bash/man zshまたはを参照してくださいhelp command

$ python3 -c 'import subprocess ; subprocess.run(["bash","-c","command -v yes"])'
/usr/bin/yes

解決策になる可能性があります(私はzshインストールしていないので、私の例ではそれを使用していますbash)。

答え2

command -vPython 3.5を使用している場合は、実行可能ファイルへのパスを取得するために使用する必要はありません。shutil.which()(3.3から利用できるようです。)

import shutil
yes_path = shutil.which('yes')

例:

$ python3 -c 'import shutil; print(shutil.which("yes"))'
/usr/bin/yes

答え3

import subprocess
subprocess.run(['command', executable='/bin/bash',shell=True])

関連情報