我有一个接受来自命令行的参数的模块,让我们调用该模块A
。
我想从另一个模块A
执行B
,以便B
设置A
的参数 -
未将A
作为单独的流程执行。
有什么办法吗?
答案 0 :(得分:3)
这取决于模块A
如何获取它的参数。如果只查看sys.argv
并且没有__main__
测试,那么您可以更改sys.argv
:
sys.argv[1:] = ['arg1', 'arg2']
然后导入模块A
。
但是,如果您自己编写A
,请使用从__main__
测试调用的函数:
def main(*args):
# main code for module
if __name__ == '__main__`:
import sys
main(*sys.argv[1:])
然后您可以导入A
并直接致电main()
:
import A
A.main('arg1', 'arg2')
请注意,如果模块A
不是您自己的,并且 进行了__main__
测试,但该if __name__ == '__main__':
套件中的所有工作都已完成,然后你沉没了,不得不重现那段代码。
答案 1 :(得分:2)
只需在脚本中定义一个main方法,以便它可以从命令行和模块运行:
def main(arg1, arg2):
# All your code goes here
if __name__ == '__main__':
main(*sys.argv[1:])
然后你可以做任何一个:
$ a.py x y
或者
>>> import a
>>> a.main('x', 'y')
答案 2 :(得分:0)
import sys
sys.argv[1:] = ["My Arguments","other Args"] #dont replace [0] ...since it can let you know which script was actually executed ...
import A
A.run() #or whatever
我认为会有效......不是真的推荐,但......