从另一个python脚本运行一个python脚本,传入参数

这个问题在这里已经有了答案:

  • 从另一个Python脚本调用Python脚本的最佳方式是什么? 8个答案

  • 尝试使用os.system

    os.system("script2.py 1")
    

    execfile是不同的,因为它被设计为在当前执行上下文中运行一系列Python语句。 这就是为什么sys.argv不会改变你。


    这本质上是错误的。 如果您从另一个Python脚本运行Python脚本,则应该通过Python而不是通过操作系统进行通信:

    import script1
    

    在理想的世界中,您将能够直接在script1调用一个函数:

    for i in range(whatever):
        script1.some_function(i)
    

    如果有必要,你可以破解sys.argv 。 有一种使用上下文管理器完成此操作的简单方法,以确保您不会做出任何永久性更改。

    import contextlib
    @contextlib.contextmanager
    def redirect_argv(num):
        sys._argv = sys.argv[:]
        sys.argv=[str(num)]
        yield
        sys.argv = sys._argv
    
    with redirect_argv(1):
        print(sys.argv)
    

    我认为这比将所有数据传递到操作系统并返回更合适。 这很愚蠢。


    理想情况下,您要运行的Python脚本将在接近尾声时使用类似下面的代码进行设置:

    def main(arg1, arg2, etc):
        # do whatever the script does
    
    
    if __name__ == "__main__":
        main(sys.argv[1], sys.argv[2], sys.argv[3])
    

    换句话说,如果从命令行调用该模块,它将解析命令行选项,然后调用另一个函数main()来执行实际工作。 (实际的参数会有所不同,分析可能会涉及更多。)

    但是,如果您想从另一个Python脚本调用这样的脚本,则可以直接import它并直接调用modulename.main() ,而不是通过操作系统。

    os.system可以工作,但它是一个回旋(读取“慢”)的方式,因为您每次都会开始一个全新的Python解释器过程,因为没有葡萄干。

    链接地址: http://www.djcxy.com/p/77191.html

    上一篇: Run a python script from another python script, passing in args

    下一篇: Run a linux system command as a superuser, using a python script