2013-07-02 18 views
1

我有一个python脚本,我想每5分钟运行一次以检查服务器上的新文件。我知道我可以用cron-job来做到这一点。但在我的python脚本的目录中,我有一个名为'logs'的文件夹。有没有一种方法可以输出我的python脚本返回的每一次(每次至少返回20到30行)到文本文件中,每5分钟到达日志文件夹。我希望能够通过搜索文件来查看每次运行的输出。所以根据我的计算,我应该每天获得大约288个日志文件。使用cron-job将python输出到文本文件

另一个疑问是,我的脚本显示一些活的东西(如下载进度条),那么会有一个问题呢?

谢谢!

回答

2

如果你想让你的标准输出转到文件,你可以像this那样做。

import sys 
sys.stdout = open('file.txt', 'w') 

当你的Python脚本打印出的东西就会去file.txt,而不是标准输出的方式。

这是复制粘贴示例。

import sys 
sys.stdout = open("file.txt", 'w') 

for n in xrange(100): 
    print n 

#I bet you can guess what you're going to see in file.txt 

这将在一个文本文件打印0-99名为file.txt什么都不会显示在控制台上。

+0

所以我只需要使用第二行一次?以及在哪里,在开始还是结束?它会打印脚本打印的所有行吗?谢谢 –

+0

在打印任何东西之前,先将第二行放在最前面。 – John

2

如果你不想修改脚本本身,您可以将输出重定向到一个时间戳的文件:

./your/script.py > "your-log-file-"`date +"%Y-%m-%d-%H-%M-%S"`".log" 

这会格式的输出文件:

your-log-file-2013-07-01-20-22-45.log

+0

我可以在cron-job上使用它吗?我知道你可以把'>'指定日志的位置,但是我可以使用txt文档中使用的那些通配符吗?感谢 –

+0

>和>>(后者是append)是将命令的标准输出重定向到文件的标准方式。 Crontab简单地生成一个新的shell并执行指定的命令,因此如果该命令重定向stdout或stderr,它将被执行,就好像它是一个普通的shell一样。 [示例在这里。](http://stackoverflow.com/a/24957849/2568279) –

相关问题