2017-05-22 4 views
0

Ich habe ein einfaches Skript, das Argumente und dann auf diesen Argumenten Befehle ausführen wird. Für die Ausgabe jedes Befehls speichert es es in eine Datei und dann am Ende reißt es die Dateien. Es macht die Dateien mit der vollständigen Ausgabe des Befehls in es, aber wenn es dann die Dateien reißt, legt es nicht die ganze Datei hinein. Es fängt die erste Zeile ein und das ist alles. Die erste Datei geht ohne Probleme rein.Python ZipFile zippen einen Teil der Textdateien

#!/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() 

Antwort

0

Für jedes Popen Objekt, das Sie erstellen, müssen Sie die wait Methode nennen es so, dass der Vorgang abgeschlossen ist, bevor Sie die Datei zippen up starten.

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

Ehrfürchtig, das half aber jetzt, dass Banner "------------ Banner -----------" am unteren Rand jeder Ausgabe druckt. – sqlsqlsql

+0

Das klingt nach einer anderen Frage. –