2

subprocess.check_output('ls')実行するとすべてが機能するのに、次のようなコマンドに引数を追加するsubprocess.check_output('ls -la')と、エラーが発生するのはなぜですか:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

コマンド引数を に渡すにはどうすればよいsubprocess.check_output()ですか?

4

2 に答える 2

6

引数をリストに分割する必要があります。

subprocess.check_output(['ls', '-la']) 

callable は、シェルのsubprocessようにコマンドを個々の引数に解析しません。これを自分で行うかsubprocess、シェルを明示的に使用するように指示する必要があります。

subprocess.check_output('ls -la', shell=True) 

後者は、アプリケーションをセキュリティの脆弱性にさらす可能性があるため、お勧めしません。shlex.split()必要に応じて、シェルのようなコマンド ラインを解析するために使用できます。

>>> import shlex
>>> shlex.split('ls -la')
['ls', '-la']
于 2012-11-11T14:30:21.093 に答える
0

sh.pyがより親しみやすいかもしれません:

import sh

print sh.ls("-la")
于 2012-11-12T05:56:21.483 に答える