子进程库不会执行compgen

时间:2014-05-08 19:16:57

标签: linux python-2.7 subprocess compgen

我正在尝试列出我的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

我被困住了。你能帮助我吗?如何使用子进程执行compgen命令?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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