2017-03-10 19 views
0

私はファイルの内容をpythonでテールしようとしています。サブプロセスを使用してpython 2.7で末尾のcmd出力を取得する

tail: cannot open `/hostname/user/app/filename.*39102' 

私はbashで直接ファイルパスでtailコマンドを実行した場合、私は出力を参照してください:上記のコードは以下のようなエラーがスローされます

#! /usr/bin/python 

import subprocess 
import os.path 

# Get the file path 
filepath = os.path.join(baseDir,"filename.*" + uniqueId) 
# Call subprocess and get last 10 lines from file 
spTailFile = subprocess.Popen(["tail", "-10", filepath ], stdout=subprocess.PIPE) 
tailOutput = spTailFile.communicate()[0] 
print tailOutput 

以下のように私が使用していますコードです。

tail -10 /hostname/user/app/filename.*39102 

はなぜサブプロセスは、余分なバッククォートを渡している( `)tailコマンドを実行するときに?

更新:

私はpopenのCMDに渡し、その後@cdarkeを示唆していたとして、ファイルを見つけるために、グロブを使用して終わりました。

+1

別の可能性:ファイル名のリストを取得するには、Python関数 'glob.glob(" filename。* ")'を使用します。もう一つの可能​​性があります: 'Popen'パラメータに' shell = True'を追加するのは、ファイル拡張(globbing)を行うシェルなのでです。 – cdarke

答えて

1

Bashは '*'を拡張し、Popenではありません。

2つの可能性:。
1.スクリプト内で実行し、 '*'を付けずにファイル名を渡します。
2. Bashスクリプトを作成し、これをPythonから呼び出します。

+0

あなたは正しいのですが、バッシュは問題の原因となっていた「*」を拡大していました。完全なファイル名を渡した後、期待通りにcmdが実行されました。 – EndlessSpace

関連する問題