Python ZipFile正在压缩部分文本文件

时间:2017-05-22 01:09:10

标签: python python-2.7

我有一个简单的脚本,它将接受参数,然后根据这些参数运行命令。对于每个命令的输出,它将其保存到文件中,然后在最后将其压缩文件。它使文件中包含命令的完整输出,但是当它压缩文件时,它不会将整个文件放入其中。它捕获第一行,然后就是全部。第一个文件没有问题。

#!/usr/bin/python

import sys
import os
import subprocess
from zipfile import ZipFile

filenames = []

def zip():
with ZipFile('zippity.zip', 'w') as zip:
    for file in filenames:
        zip.write(file)


def command(cmd, arg, banner, filename, i):
    ban = '------------' + banner + '-------------\n'
    if i.islower():
        filenames.append(filename)
        f = open(filename, 'w')
        f.write(ban)
        if arg == '':
            subprocess.Popen(cmd, stdout=f)
        else:
            subprocess.Popen([cmd, arg], stdout=f)
        f.close()
    elif i.isupper():
        filenames.append(filename)
        print '------------' + banner + '-------------'
        os.system(cmd)
        print('\n')
        f = open(filename, 'w')
        f.write(ban)
        if arg == '':
            subprocess.Popen(cmd, stdout=f)
        else:
            subprocess.Popen([cmd, arg], stdout=f)
        f.close()


def menu():
    print('System Survey v1.0\n' +
          'Usage: ' + sys.argv[0] + ' [OPTIONS]\n' +
          'Example: ' + sys.argv[0] + ' -a -i -r -b\n' +
          'Description: Lowercase will create file and not display to screen. \n' +
          'Uppercase will display and save to file.\n\n' +
          '----[OPTIONS]----\n' +
          '-i         ifconfig -a\n' +
          '-r         route\n' +
          '-w         whoami\n')


for i in sys.argv:
    if len(sys.argv) == 1:
        menu()
        break
    if i == '--help':
        menu()
        break
    elif i == '-i' or i == '-I':
        command('ifconfig', '-a', 'IFCONFIG', 'ifconfig.txt', i)
    elif i == '-r' or i == '-R':
        command('route', '', 'ROUTE', 'route.txt', i)
    elif i == '-w' or i == '-W':
        command('whoami', '', 'WHOAMI', 'whoami.txt', i)
    elif i == sys.argv[0]:
        continue
    else:
        print(sys.argv[0] + ': option not recognized.')
        print(sys.argv[0] + ': --help gives usage information.')

zip()

1 个答案:

答案 0 :(得分:0)

对于您创建的每个Popen对象,必须在其上调用wait方法,以便在开始压缩文件之前完成该过程。

process = subprocess.Popen(cmd, stdout = f)
process.wait()