次のGNUfind
コマンドを使用してディレクトリの内容を検索する必要があります。
パスの検索-typef-name file1 -o -name file2 -o -name file3
Linuxシェルでこのコマンドを実行すると、find
コマンドは終了コード0で返されます。サブプロセス呼び出し内で同じコマンドを実行すると、find
コマンドは終了コード1を返します。
import subprocess
import shlex
findcmd = "/depot/findutils/bin/find /remote/scratch/results -type f -name 'QUEUED' -o -name 'run.pid' -o -name 'PID'"
try:
output = subprocess.check_output(shlex.split(findcmd))
except subprocess.CalledProcessError, cpe:
print cpe.output
raise cpe
出力:
Traceback (most recent call last):
File "./getaverages.py", line 63, in <module>
raise cpe
subprocess.CalledProcessError: Command '['/depot/findutils/bin/find', '/remote/scratch/results', '-type', 'f', '-name', 'QUEUED', '-o', '-name', 'run.pid', '-o', '-name', 'PID']' returned non-zero exit status 1
奇妙な部分は、CalledProcessError
オブジェクトの出力属性が、Linuxシェルで実行したときに得られる出力とまったく同じであるということですfind
(返される出力には約15K行が含まれています)。私もbufsize=-1を設定しようとしましたが、それは役に立ちませんでした。
この動作を理解するための提案はありますか?
私はPython2.7.2を使用しており、find
バージョンは4.2.20です。