gpt4 book ai didi

Python如何将子进程定向到输出文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:26 25 4
gpt4 key购买 nike

我创建了一个脚本,它接收一堆日志文件作为输入,以便进行一些模式匹配。但是,我的“processFiles”方法无法正常工作。它应该将所有数据写入“fileDest”。但创建的文件仍然是空的。如果我在函数本身下放置一个“print processFiles”语句,我可以在终端上看到行作为吞吐量。

为了让事情变得更有趣,bunzip2 在我运行脚本时报告了此错误:

<小时/>

正在处理/opt/syslog/app/applog-20140314.bz2。 Bunzip2:无法打开输入文件>:没有这样的文件或目录。 Bunzip2:压缩文件意外结束;也许它已损坏? *可能的原因如下。 Bunzip2:没有这样的文件或目录输入文件 =/var/tmp/parsed_applog-20140314.decompressed,输出文件 = (stdout)

<小时/>

我的代码中的某些内容似乎将输出发送到标准输出。而不是文件。

def parse_log_files(self):
sub_dir = os.listdir(self.base_path)
for directory in sub_dir:
if re.search('app\d+', directory):
fileInput = self.base_path + '/' + directory + '/applog-' + str(self.date.strftime('%Y%m%d')) + '.bz2'
fileDest = '/var/tmp/parsed_log_files-' + str(self.date.strftime('%Y%m%d')) + '.decompressed'
if not os.path.isfile(fileDest):
subprocess.Popen(['touch',fileDest]).communicate()[0]
proccessFiles = subprocess.Popen(['/bin/bunzip2','-cd',fileInput,' > ',fileDest],stdout=subprocess.PIPE).communicate()[0]
accessFileHandle = open(self.file_out, 'r')
readFileHandle = accessFileHandle.readlines()
print "Proccessing %s." % fileInput

最佳答案

' > ' 是 shell 重定向语法。除非您要求(您不应该这样做),否则 Popen 不会生成 shell。如果要将子进程的输出重定向到文件,请使用 stdout=file_object 参数,例如:

from subprocess import check_call

with open('/path/to/output', 'wb', 0) as output_file:
check_call(['command', 'arg1', 'arg2'], stdout=output_file)

关于Python如何将子进程定向到输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com