我有一个从命令行接受参数的模块,我们称之为模块A
。
我想A
从另一个模块执行 - B
,所以这B
将设置A
的参数-
不A
作为单独的进程执行。
有什么办法吗?
我有一个从命令行接受参数的模块,我们称之为模块A
。
我想A
从另一个模块执行 - B
,所以这B
将设置A
的参数-
不A
作为单独的进程执行。
有什么办法吗?
这取决于模块如何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__':
套件中的所有工作,那么您将陷入困境并且必须重现该代码。
只需在脚本中定义一个 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
我认为会工作......不是真的推荐但是......