我正在尝试编写一个python模块,在其主函数中调用另一个模块的main函数。
我正在编写的模块名为Trial.py,包含要调用的函数的模块称为print_all.py
。
print_all.py是一个名为mrtparse的库。可以找到该库here。
请注意,当我在Linux shell中运行print_all.py
时,它需要一个文件(.gz)作为参数,如下所示
$ python print_all.py updates.gz
Trial.py
看起来像这样:
from mrtparse import *
import gzip
import print_all
import os
from urllib2 import urlopen, URLError, HTTPError
def fn1():
Bla Bla
def fn2():
Bla Bla
def main():
mrtparse.print_all.main(updates.gz) //I want to do something like this
if __name__ == '__main__':
main()
作为参数传递的所有模块和文件都在同一目录中。 这似乎是一件容易做的事情,但我现在很难过。
答案 0 :(得分:0)
你可以在脚本中想要在else语句中的main()处运行main函数,而不是if name 然后在脚本中导入它并运行。
if __name__=='__main__':
pass
else:
main()
答案 1 :(得分:0)
由于您要单独导入模块print_all,因此可以调用print_all.main()。
更新:我刚看了模块print_all.py。第一个参数将被假定为文件本身的名称(print_all)。所以updates.gz必须是第二个参数。还要确保使用引号,因为传入的是字符串。
所以你的代码将是:
System.out.println("max-" + func(0, 0)); // -> max-8186
答案 2 :(得分:0)
我想,你应该使用:
# ...
import print_all
# ...
def main():
print_all.main("updates.gz")
老实说,print_all - 不是模块,你不能从任何地方导入它。请注意,__init__.py
- 文件夹中没有examples
。
否则,您将可以使用mrtparse.examples.print_all
。
但现在mrtparse
examples
没有看到任何内容。
因此,您可以将print_all
- 脚本放在您的脚本附近,并像上面显示的那样使用它。
print_all中的main函数没有参数。 它从命令行参数中获取数据。
我想,你有两种方式:
sys.argv
; print_all
重写主页。import sys
sys.argv = sys.argv = [sys.argv[0], 'updates.gz']
# ...
import print_all
# ...
def main():
print_all.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()