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
command
Python 하위 프로세스에서 어떻게 사용합니까? 일부 추가 패키지를 설치해야 합니까?
환경:
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 -v
Python 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])