3

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 コマンドを実行するにはどうすればよいですか?

4

2 に答える 2

3

compgen組み込みの bash コマンドです。シェルで実行します。

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しかし、それは重要な部分 ( ) を最後に置くので、私は最初のバリアントを好みます。

于 2014-05-08T19:49:19.860 に答える
0

compgen が何であるかはわかりませんが、そのパスは絶対パスである必要があります。サブプロセスを使用するときは、正確なページを綴ります/absolute/path/to/compgen

于 2014-05-08T19:20:57.153 に答える