Python:将stdout写入日志文件;输出是十六进制而不是ascii

时间:2014-09-10 22:12:25

标签: python logging subprocess stdout

我正在编写一个脚本来调用i / o文件的可执行文件。我正在使用子进程并尝试将exe和stdout外壳到日志文件中。问题是我想输出一个简单的ascii文件,我得到一个十六进制文件。只是真的学习编程python(或任何语言)所以,我假设我可以做某种类型的格式,但我只是没有得到它。我已经在这个网站和其他网站上做了相当多的搜索,但我还没有像我使用子进程那样的东西。 " outRadcorr"是我最需要帮助的......任何想法?根据要求提供更多代码。

导入系统模块

import os, sys, string, traceback, time, datetime
import params
from subprocess import Popen, PIPE, STDOUT

......这里有一些代码......

将stdout写入日志文件

rad_log_file = open(dsFolder + '\\radcorr.log', 'w')

# loop through the files in raw file list to run radiometric correction
for rawfiles in rawFolderList:

    # Define the file base
    rawBase = rawfiles.split(".")[0]
    print ('\nProcessing file: %s \n')%( rawBase )

    # define variables from raw file to process radcorr
    radFile = rawfiles
    pixFile = ('%s.pix')%( rawBase )
    attFile = ('%s.att')%( rawBase )

    # create windose bat file function
    def rad_bat_writer( radcorr_bat ):
        with open(dsFolder + '\\radcorr.bat', 'a') as rad_bat_file:
            rad_bat_file.write(radcorr_bat + '\n')

    # grab radcor input/output files and run radcorr.exe
    radcorr = ('C:\\itres\\bin\\radcorr.exe -f 1 -j 100 -g 50 -s -1 -n -1 %s %s %s -i '+ rawFolder + '\%s,rb -o ' + radFolder + '\%s -a ' \
    + radFolder + '\%s -c C:\\itres\\rad_cal_files\\%s -I 0 -v 0 -r Y -R Y -^^ 2') %( sum,scatter,shift,radFile,pixFile,attFile,rad_prefix )
    # print out radcorr command
    print radcorr
    # Execute radcorr and write stdout
    outRadcorr = Popen("{};".format(radcorr), stdout=PIPE, stderr=STDOUT)
    for line in outRadcorr.stdout:
        sys.stdout.write(line)
        rad_log_file.write(line)

    # write output to log
    rad_bat_writer( radcorr )

# Close out exe and log files
outRadcorr.wait()
rad_log_file.close()

1 个答案:

答案 0 :(得分:0)

我正在使用UltraEdit查看该文件,您可以在其中查看十六进制文件。我没有查看十六进制模式。我可能会在这里混淆术语。在NotePad / NotePad ++ / WordPad等文件中看起来正常。当我在调试模式下运行脚本时,我可以按文件命中循环文件。前两个文件(1GB /文件),输出日志看起来很好。一旦radcorr.log文件超过10kb,我将从正常的ascii输出更改为查看为hex的二进制文件。我还无法发布图片,但只是google ultraedit十六进制。

仍然不确定为什么会转移到这种格式。最后,输出大小为45kb。我改为在UltraEdit中查看/编辑十六进制模式,看起来很好。只是想把它拿出来看看其他人是否有任何想法,为什么当我指定日志是' w'而不是' wb',例如。

我非常感谢你的帮助。 @ J.F。 Sebastian我必须测试你发布的代码,可能有助于修复潜在的错误。