我正试图列出我的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)放在最后,所以我更喜欢第一个变体。

09-04 23:21