【问题标题】:Python output to text file using cron-job使用 cron-job 将 Python 输出到文本文件
【发布时间】:2018-06-08 15:33:30
【问题描述】:

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

我还有一个疑问是脚本显示了一些实时的东西(比如下载进度条),那会有问题吗?

谢谢!

【问题讨论】:

    标签: python logging cron


    【解决方案1】:

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

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

    会输出以下格式的文件:

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

    【讨论】:

    • 我可以将它与 cron-job 一起使用吗?我知道您可以使用“>”来指定日志的位置,但是我可以使用您在 txt 文档中使用的那些通配符吗?谢谢
    • > 和 >>(后者是附加的)是将命令的标准输出重定向到文件的标准方法。 Crontab 只是生成一个新的 shell 并执行指定的命令,因此如果该命令重定向 stdout 或 stderr 它将像常规 shell 一样执行。 Example here.
    【解决方案2】:

    如果您希望将标准输出转到文件中,您可以像 this 一样执行此操作。

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

    这样,当您的 python 脚本打印出内容时,它将转到 file.txt 而不是 stdout。

    这是一个复制粘贴示例。

    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
    

    这将在名为 file.txt 的文本文件中打印 0-99,并且您的控制台上不会显示任何内容。

    【讨论】:

    • 所以我只需要使用第二行一次?在哪里,在开始还是结束?它会打印脚本打印的所有行吗?谢谢
    • 在打印任何内容之前将第二行放在开头。
    猜你喜欢
    • 2014-05-18
    • 2014-09-17
    • 2015-12-21
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多