【问题标题】:How I can call and run the python mainmodel.py inside a loop in another python script?如何在另一个 python 脚本的循环中调用和运行 python mainmodel.py?
【发布时间】:2015-11-14 21:21:48
【问题描述】:

我一直在努力运行 python mainmodel.py 模型(该模型使用“mainmodel.py”模型,所有内容都是命令)。

问题是我不能在 python 的循环中运行这个模型。 想法是在不同条件下运行模型,在模型的敏感性分析中(15 个参数中的每一个都有许多变化)。 我很想用这个: How to run a Python script from another Python script in the cross-platform way?

How to run a python script from another python script and get the returned status code?

我调用“mainmodel.py”的代码很简单,只有在运行模型时,我调用“mainmodel.py”的代码是:

###################################################
__author__ = 'Isaque'
import mainmodel
import subprocess
import sys

for t in range(3):
    print 'MAJOR LOOP %s T'%t
    for i in range(2):
        subprocess.call((sys.executable, "mainmodel.py"))
        print 'MINOR LOOP %s'%i

#################################################

问题是,我们需要测试模型内部的许多参数。因为这样做(在 analisys 的敏感性)自动化! 提前致谢!! 伊萨克

【问题讨论】:

  • 我不确定我是否理解您的问题。 mainmodel.py 是什么?它是如何得到它的参数的?您真的需要将其作为脚本调用,还是可以将其导入并运行其功能?
  • 嗨,Gonzalon,“mainmodel.py”是模型的控制器。从“mainmodel”被称为模型的所有部分。这个想法是使用“控制”模型调用“主模型”作为 16 个参数运行(每个参数有 20 个不同的值)。在这段代码中,我开发了一个序列来选择参数。但我可以在“控制”中做到这一点,但我不能将选定的值从“控制”转移到“生成器”模块。雪儿!!

标签: python python-2.7


【解决方案1】:

另一种方法是触发 __main__ 哨兵。欲了解更多信息,请查看:

In Python, can I call the main() of an imported module?

【讨论】:

    【解决方案2】:
            #Please check the below code. Hope it helps.
    
            #Demo for mainmodel.py
            import sys
    
            def check_args(temp1,temp2):
                if temp1 == temp2:
                    return True
                else:
                    return False
    
            def main():
                arg1 = sys.argv[1]
                arg2 = sys.argv[2]
                print "I am in mainmodel.py"
                ret = check_args(arg1,arg2)
                if ret:
                    #print "Success"
                    sys.exit(0)
                else:
                    #print "Fail"
                    sys.exit(1)
    
            if __name__ == '__main__':
                main()
        #=========================================================
    
        #Calling mainmodel.py with args testing 
    
        import os
        for t in range(3):
            print 'MAJOR LOOP %s T'%t
            for i in range(3):
                print 'MINOR LOOP %s'%i
                cmd =  "python mainmodel.py "+ str(t) +" " + str(i) 
                print cmd
                ret_main_model = os.system(cmd)
                if ret_main_model == 0:
                    print "Success"
                else:
                    print "Fail"
                print "-----------------------------"
    
    #=========================================
    #Output
    
    C:\Users\Administrator\Desktop>python call.py
    MAJOR LOOP 0 T
    MINOR LOOP 0
    python mainmodel.py 0 0
    I am in mainmodel.py
    Success
    -----------------------------
    MINOR LOOP 1
    python mainmodel.py 0 1
    I am in mainmodel.py
    Fail
    -----------------------------
    MINOR LOOP 2
    python mainmodel.py 0 2
    I am in mainmodel.py
    Fail
    -----------------------------
    MAJOR LOOP 1 T
    MINOR LOOP 0
    python mainmodel.py 1 0
    I am in mainmodel.py
    Fail
    -----------------------------
    MINOR LOOP 1
    python mainmodel.py 1 1
    I am in mainmodel.py
    Success
    -----------------------------
    MINOR LOOP 2
    python mainmodel.py 1 2
    I am in mainmodel.py
    Fail
    -----------------------------
    MAJOR LOOP 2 T
    MINOR LOOP 0
    python mainmodel.py 2 0
    I am in mainmodel.py
    Fail
    -----------------------------
    MINOR LOOP 1
    python mainmodel.py 2 1
    I am in mainmodel.py
    Fail
    -----------------------------
    MINOR LOOP 2
    python mainmodel.py 2 2
    I am in mainmodel.py
    Success
    -----------------------------
    
    C:\Users\Administrator\Desktop>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多