subprocess库不会执行compgen

我正在尝试在我的linux(Lubuntu)机器上列出所有可用的命令。 我想在Python中进一步处理这个列表。 通常要在控制台中列出命令,我会写“compgen -c”,它会将结果打印到标准输出。

我想执行该命令使用Pythonsubprocess库,但它给了我一个错误,我不知道为什么。

这里是代码:

#!/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是一个内置的bash命令 ,在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 )放在最后,所以我更喜欢第一个变体。

我不确定compgen是什么,但是这个道路必须是绝对的。 当我使用子/absolute/path/to/compgen ,我拼出确切的页面/absolute/path/to/compgen