我有一个模块,它接受来自命令行的参数,让我们调用该模块A
。
我想从另一个模块B
执行A
,这样B
将设置A
的参数-
而不将CCD_ 6作为单独的处理来执行。
有什么办法吗?
这取决于模块A
如何接受它的参数。如果仅查看sys.argv
,而没有__main__
测试,则可以更改sys.argv
:
sys.argv[1:] = ['arg1', 'arg2']
则导入模块CCD_ 11。
但是,如果您自己编写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__':
套件中完成所有工作,那么您将陷入困境,必须重新生成该代码。
只需在脚本中定义一个主方法,就可以从命令行和作为模块运行:
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')
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
我认为会起作用。。。不是很推荐,但是。。。。