我想,你应该使用:
# ...
import print_all
# ...
def main():
print_all.main("updates.gz")
老实说,print_all — 不是一个模块,你不能从任何地方导入它。请注意,examples 文件夹中没有 __init__.py。
否则,您将能够使用mrtparse.examples.print_all。
但是现在mrtparse 在examples 中看不到任何内容。
所以,您可以将print_all-script 放在您的脚本附近,然后像我上面显示的那样使用它。
之后
print_all 中的主函数没有参数。
它从命令行参数获取数据。
我认为,你有两种方法:
- 错误——补丁
sys.argv;
- 正确 — 从
print_all 重写 main。
修补 sys.argv(不好的方式)
import sys
sys.argv = sys.argv = [sys.argv[0], 'updates.gz']
# ...
import print_all
# ...
def main():
print_all.main()
# ...
重写 main()
将此函数发布到print_all 并使用它代替main。
def do_work(filename):
d = Reader(filename)
# if you want to use 'asdot+' or 'asdot' for AS numbers,
# comment out either line below.
# default is 'asplain'.
#
# as_repr(AS_REPR['asdot+'])
# as_repr(AS_REPR['asdot'])
for m in d:
m = m.mrt
print('---------------------------------------------------')
if m.err == MRT_ERR_C['MRT Header Error']:
prerror(m)
continue
print_mrt(m)
if m.err == MRT_ERR_C['MRT Data Error']:
prerror(m)
continue
if m.type == MRT_T['TABLE_DUMP']:
print_td(m)
elif m.type == MRT_T['TABLE_DUMP_V2']:
print_td_v2(m)
elif ( m.type == MRT_T['BGP4MP']
or m.type == MRT_T['BGP4MP_ET']):
print_bgp4mp(m)
正确的方式
将do_work 放在您自己的模块或代码中的任何其他位置。
之后,例如,您的文件将如下所示:
import sys
from optparse import OptionParser
from datetime import *
from mrtparse import *
from print_all import *
import gzip
import print_all
import os
from urllib2 import urlopen, URLError, HTTPError
def fn1():
Bla Bla
def fn2():
Bla Bla
def do_work(filename):
d = Reader(filename)
# if you want to use 'asdot+' or 'asdot' for AS numbers,
# comment out either line below.
# default is 'asplain'.
#
# as_repr(AS_REPR['asdot+'])
# as_repr(AS_REPR['asdot'])
for m in d:
m = m.mrt
print('---------------------------------------------------')
if m.err == MRT_ERR_C['MRT Header Error']:
prerror(m)
continue
print_mrt(m)
if m.err == MRT_ERR_C['MRT Data Error']:
prerror(m)
continue
if m.type == MRT_T['TABLE_DUMP']:
print_td(m)
elif m.type == MRT_T['TABLE_DUMP_V2']:
print_td_v2(m)
elif ( m.type == MRT_T['BGP4MP']
or m.type == MRT_T['BGP4MP_ET']):
print_bgp4mp(m)
def main():
do_work('updates.gz')
if __name__ == '__main__':
main()