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])

관련 정보