Python apkファイルURLアドレスインスタンスの取得

3114 ワード

作業中にapkファイルの特定のURLアドレスを抽出する必要がある場合が多く,Pythonスクリプトによる自動処理を想定している.必要なPythonの基礎知識は以下の通りである:os.walk()関数宣言:os.walk(top,topdown=True,onerror=None)(1)パラメータtopは、巡回する必要があるトップディレクトリのパスを表します.(2)パラメータtopdownのデフォルト値が「True」であることは,まず上位ディレクトリの下のファイルを返し,次にサブディレクトリの中のファイルを巡回することを意味する.topdownの値がFalseの場合は、サブディレクトリ内のファイルを巡回してから、最上位ディレクトリの下のファイルに戻ることを示します.(3)パラメータonerrorのデフォルト値は「None」で、ファイル遍歴を無視したときのエラーを表します.空でない場合は、カスタム関数プロンプトのエラーメッセージを指定してから、ループを続行するか、例外を投げ出してループを中止します.戻り値:関数は3つの要素を含むメタグループを返します.この3つの要素は、パス名、パスサブディレクトリリスト、ディレクトリ下のファイルリストです.os.walk使用例:フォルダを削除する(もちろんos.listdirの再帰呼び出しで削除できます)
 
  
#! /usr/bin/env python
#coding=utf-8
import os

def Remove_dir(top_dir):
    if os.path.exists(top_dir)==False:
        print "not exists"
        return
    if os.path.isdir(top_dir)==False:
        print "not a dir"
        return
    for dir_path,subpaths,files in os.walk(top_dir,False):
        for file in files:
            file_path=os.path.join(dir_path,file)
            print "delete file:%s"  %file_path
            os.remove(file_path)
        print "delete dir:%s" %dir_path
        os.rmdir(dir_path)

#
Remove_dir(r"C:\Users\Administrator\Desktop\abc")


Pythonがシステムコマンドを実行する方法os.system(),os.popen(),commands.getstatusoutput() 
os.System()は出力と戻り値を取得できません.
osを通るpopen()はfile readのオブジェクトを返し、read()を読み出す操作で実行された出力が表示されますが、戻り値は得られません.
commandsを通ります.getstatusoutput()メソッドでは、戻り値と出力が得られます.
(status, output) = commands.getstatusoutput('cat/proc/cpuinfo') 
3.Pythonのoperatorモジュールのcontains(…)関数#カンスウ#
contains(a, b) -- Same as b in a (note reversed operands). bがaに含まれるか否かを判断する
基礎知識の紹介が終わったら、コードをつけることができます.
 
  
import os
import operator
import commands
#from signature import *

inputdir = "./tmp"

for path, dir, files in os.walk(inputdir):
    for file in files:
    if not file.endswith('.apk'):
        #print "not apk file."
        continue
    apkpath = os.path.join(inputdir, file)
    cmd = './xxx -d %s' %apkpath
    output = os.popen(cmd)
    s = set()
    # URL
    for line in output:
        if operator.contains(line, "http://"):
            #print tmp
            start = line.index('''http://''')
            end = line.index('''"''',start)
            url = line[start:end]
            s.add(url)
    cmd = './yyy -t a.expense.mdk.a.tvd %s' %apkpath
    #
    status, output = commands.getstatusoutput(cmd)
#    print output

    if output.startswith('find'):
        print output

        for url in s:
            if url.find('imei')!=-1:
                print 'url is %s' %url.strip()
        #print '========================='
    s = ''