2016-03-19 6 views
1

おそらく私はやっていますが、誰か助けてください。私がやろうとしているのは、statファイルです。私がPython変数をデバッグしたときに、シェルがその出力でstatを行うことができるとき、Pythonはこれをしません。以下を参照してください:これは一部の専門家のための時間を簡単に廃棄物がある場合Python os.statはファイル名にワイルドカードを展開していません

[[email protected] output]# python /usr/local/nagios/libexec/check_logrip_log_not_stale.py 
    Traceback (most recent call last): 
     File "/usr/local/nagios/libexec/check_logrip_log_not_stale.py", line 36, in <module> 
     print os.stat(logFormat) 
OSError: [Errno 2] No such file or directory: '/home/famnet/logs/output/logrip-out-2016-03-19-*' 

は私を許してください:

[[email protected] output]# cat /usr/local/nagios/libexec/check_logrip_log_not_stale.py 

import os 
import sys 
import datetime 
import time 

# Nagios return values 
nagiosRetValOk  = 0 
nagiosRetValWarn  = 1 
nagiosRetValCritical = 2 

# Below is the filename I am after 
#logrip-out-2016-03-19-1458386101 

dateFormat = datetime.datetime.now().strftime("%Y-%m-%d") 
logFormat = "/home/famnet/logs/output/logrip-out-%s-*" % dateFormat 


print os.stat(logFormat) 

は、ここで私は基本的なスクリプトを実行するときに何が起こるかです。

ありがとう、 私は私のプリントデバッグの出力を取って、シェルで実行すると動作します。

[[email protected] output]# stat /home/famnet/logs/output/logrip-out-2016-03-19-* 
    File: `/home/famnet/logs/output/logrip-out-2016-03-19-1458386101' 
    Size: 42374797  Blocks: 82776  IO Block: 4096 regular file 
Device: fd02h/64770d Inode: 36590817 Links: 1 
Access: (0644/-rw-r--r--) Uid: ( 504/ famnet) Gid: (1100/ staff) 
Access: 2016-03-19 07:15:01.725794193 -0400 
Modify: 2016-03-19 07:44:09.847793116 -0400 
Change: 2016-03-19 07:44:09.847793116 -0400 

答えて

3

拡張を使用してみてください...ワイルドカードを自動的に拡大しないよう、この場合bashなど、多くの一般的なシェルの機能です。 os.statのシステムコールの機能ではありません。

複数のファイルに対してos.statを呼び出す場合は、最初にglob.globなどを使用してリストし、次にパスごとにos.statを呼び出す必要があります。このような何か:

for full_path in glob.glob(logFormat): 
    print os.stat(full_path) 

ワイルドカードでのパスは、コマンドラインSTAT(1)で作業することができ、複数の具体的なパスに展開するかもしれないが、確かに一つだけのパスを引数に取るos.statを破るだろうということにも確認します。

+0

優れたアドバイス、ありがとうございました。私はこの答えを受け入れた – jaysunn

0

os.statワイルドカードのglob

関連する問題