我正试图列出我的linux(lubuntu)机器上可用的每个命令。我想用python进一步处理这个列表。通常,为了在控制台中列出命令,我会编写“compgen-c”并将结果打印到stdout。
我想使用python子进程库执行该命令,但它给了我一个错误,我不知道为什么。
代码如下:
#!/usr/bin/python
import subprocess
#get list of available linux commands
l_commands = subprocess.Popen(['compgen', '-c'])
print l_commands
下面是我得到的错误:
Traceback (most recent call last):
File "commands.py", line 6, in <module>
l_commands = subprocess.Popen(['compgen', '-c'])
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我卡住了。你们能帮我一下吗?如何使用subprocess执行compgen命令?
最佳答案
compgen
is a builtin bash command,在shell中运行它:
from subprocess import check_output
output = check_output('compgen -c', shell=True, executable='/bin/bash')
commands = output.splitlines()
你也可以这样写:
output = check_output(['/bin/bash', '-c', 'compgen -c'])
但它把关键部分(
compgen
)放在最后,所以我更喜欢第一个变体。