<p>我想,你应该使用:</p>
<pre class="lang-python prettyprint-override"><code># ...
import print_all
# ...
def main():
print_all.main("updates.gz")
</code></pre>
<p>老实说,print_all-不是一个模块,您不能从任何地方导入它。注意,<code>examples</code>-文件夹中没有<code>__init__.py</code>。
否则,您将能够使用<code>mrtparse.examples.print_all</code>。
但是现在<code>mrtparse</code>在<code>examples</code>中看不到任何东西。在</p>
<p>因此,您可以将<code>print_all</code>-script放在脚本附近,并像上面所示那样使用它。在</p>
<h2>之后呢</h2>
<p>print_中的Main函数都没有参数。
它从命令行参数获取数据。在</p>
<p>我想,你有两种方法:</p>
<ul>
<li>错误-补丁<code>sys.argv</code></li>
<li>从<code>print_all</code>重写main。在</li>
</ul>
<h2>补丁系统argv(坏方法)</h2>
^{pr2}$
<h2>重写main()</h2>
<p>将此函数发布到<code>print_all</code>中,并使用它代替<code>main</code>。在</p>
<pre><code>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)
</code></pre>
<h2>正确的方法</h2>
<p>将<code>do_work</code>放入您自己的模块或代码中的任何其他位置。
例如,在此之后,yout文件将如下所示:</p>
<pre><code>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()
</code></pre>