Run a python script from another python script, passing in args

This question already has an answer here:

  • What is the best way to call a Python script from another Python script? 8 answers

  • Try using os.system :

    os.system("script2.py 1")
    

    execfile is different because it is designed to run a sequence of Python statements in the current execution context. That's why sys.argv didn't change for you.


    This is inherently the wrong thing to do. If you are running a Python script from another Python script, you should communicate through Python instead of through the OS:

    import script1
    

    In an ideal world, you will be able to call a function inside script1 directly:

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

    If necessary, you can hack sys.argv . There's a neat way of doing this using a context manager to ensure that you don't make any permanent changes.

    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)
    

    I think this is preferable to passing all your data to the OS and back; that's just silly.


    Ideally, the Python script you want to run will be set up with code like this near the end:

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

    In other words, if the module is called from the command line, it parses the command line options and then calls another function, main() , to do the actual work. (The actual arguments will vary, and the parsing may be more involved.)

    If you want to call such a script from another Python script, however, you can simply import it and call modulename.main() directly, rather than going through the operating system.

    os.system will work, but it is the roundabout (read "slow") way to do it, as you are starting a whole new Python interpreter process each time for no raisin.

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

    上一篇: 如何从Sublime Text 2运行Python代码?

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