how to execute a python script file with an argument from inside another python script file

前端 未结 5 1373
灰色年华
灰色年华 2020-12-01 14:05

my problem is that I want to execute a python file with an argument from inside another python file to get the returned values....

I don\'t know if I\'ve explained

相关标签:
5条回答
  • 2020-12-01 14:48

    execfile() runs one script within the other, which is not what you want. The subprocess module can be used to run another instance of the Python interpreter, but what you should do is look at getCameras.py and see if there's some function you can invoke after importing it.

    0 讨论(0)
  • 2020-12-01 14:49

    Another way that may be preferable to using os.system() would be to use the subprocess module which was invented to replace os.system() along with a couple of other slightly older modules. With the following program being the one you want to call with some master program:

    import argparse
    
    # Initialize argument parse object
    parser = argparse.ArgumentParser()
    
    # This would be an argument you could pass in from command line
    parser.add_argument('-o', action='store', dest='o', type=str, required=True,
                        default='hello world')
    
    # Parse the arguments
    inargs = parser.parse_args()
    arg_str = inargs.o 
    
    # print the command line string you passed (default is "hello world")
    print(arg_str)
    

    Using the above program with subproccess from a master program would would look like this:

    import subprocess
    
    # run your program and collect the string output
    cmd = "python your_program.py -o THIS STRING WILL PRINT"
    out_str = subprocess.check_output(cmd, shell=True)
    
    # See if it works.
    print(out_str)
    

    At the end of the day this will print "THIS STRING WILL PRINT", which is the one you passed into what I called the master program. subprocess has lots of options but it is worth using because if you use it write your programs will be system independent. See the documentation for subprocess, and argparse.

    0 讨论(0)
  • 2020-12-01 14:55

    The best answer is don't. Write your getCameras.py as

    import stuff1
    import stuff2 
    import sys
    
    def main(arg1, arg2):
        # do whatever and return 0 for success and an 
        # integer x, 1 <= x <= 256 for failure
    
    if __name__=='__main__':
        sys.exit(main(sys.argv[1], sys.argv[2]))
    

    From your other script, you can then do

    import getCamera
    
    getCamera.main(arg1, arg2)
    

    or call any other functions in getCamera.py

    0 讨论(0)
  • 2020-12-01 14:57

    I suggest you reorganized your getCameras.py, wrap the get camera list code in a method called get_cameras(). Then you can call this method in other python scripts.

    getCameras.py

    def get_cameras():
    bulabula...
    if __name__ == '__main__':
    return get_cameras()
    

    How to use: other.py

    import getCameras
    camera_list = getCameras.get_cameras()
    
    0 讨论(0)
  • 2020-12-01 14:58

    First off, I agree with others that you should edit your code to separate the logic from the command line argument handling.

    But in cases where you're using other libraries and don't want to mess around editing them, it's still useful to know how to do equivalent command line stuff from within Python.
    The solution is os.system(command)
    Atleast on Windows, it brings up a console and executes the command, just the same way as if you had entered it into the command prompt.

    import os
    os.system('getCameras.py "path_to_the_scene" ')
    
    0 讨论(0)
提交回复
热议问题