Debian
在 python 子程序中找不到命令“命令”
在以下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'
在 shell (zsh) 中,這是按預期工作的:
$ command -v yes /usr/bin/yes
如何
command
在 python 子程序中使用?我必須安裝一些額外的軟體包嗎?環境:
Debian 9 (stretch) 與 Python 3.5.3 和 zsh 5.3.1
command
是一個內置的 shell,所以不是文件系統中的一個自己的對象。見
man bash
/man zsh
或help command
。$ python3 -c 'import subprocess ; subprocess.run(["bash","-c","command -v yes"])' /usr/bin/yes
可能是一個解決方案(我沒有
zsh
安裝,所以我的範例bash
改為使用)。
如果您使用的是 Python 3.5,則無需使用
command -v
來獲取執行檔的路徑。有shutil.which()
(我認為從 3.3 開始提供)。import shutil yes_path = shutil.which('yes')
例子:
$ python3 -c 'import shutil; print(shutil.which("yes"))' /usr/bin/yes