0

我有一个从命令行接受参数的模块,我们称之为模块A

我想A从另一个模块执行 - B,所以这B将设置A的参数-

A作为单独的进程执行。

有什么办法吗?

4

3 回答 3

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__':套件中的所有工作,那么您将陷入困境并且必须重现该代码。

于 2012-12-23T17:56:27.393 回答
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')
于 2012-12-23T17:56:20.170 回答
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

我认为会工作......不是真的推荐但是......

于 2012-12-23T17:55:45.150 回答