我有一个简单的脚本,它将接受参数,然后根据这些参数运行命令。对于每个命令的输出,它将其保存到文件中,然后在最后将其压缩文件。它使文件中包含命令的完整输出,但是当它压缩文件时,它不会将整个文件放入其中。它捕获第一行,然后就是全部。第一个文件没有问题。
#!/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()
答案 0 :(得分:0)
对于您创建的每个Popen
对象,必须在其上调用wait
方法,以便在开始压缩文件之前完成该过程。
process = subprocess.Popen(cmd, stdout = f)
process.wait()