如何从不同的python脚本调用python脚本?

时间:2016-11-09 12:24:39

标签: python python-2.7 subprocess

我有一个python“client.py”脚本,如下所示:

    import sys
    import traceback
    import client_new
    import subprocess
    def main():
        print "inside client"
        subprocess.Popen('C:/client_new.py',shell=True)
        #execfile('client_new.py')
    if __name__ == "__main__":
        is_sys_exit = False
        ret_val = 0
        try:
            ret_val = main()
        except SystemExit:
            is_sys_exit = True
        except:
            if not is_sys_exit:
                print( traceback.format_exc() )
                if sys.version_info < ( 3,0 ):
                    raw_input( "Press return to continue" )
                else:
                    input( "Press return to continue" )
                sys.exit( 1 )
        if is_sys_exit:
            print( "SystemExit Exception was caught." )
        sys.exit( ret_val )

client_new.py脚本如下:

    import traceback
    def main():
        print "inside client new"

    if __name__ == "__main__":
        is_sys_exit = False
        ret_val = 0
        try:
            ret_val = main()
        except SystemExit:
            is_sys_exit = True
        except:
            if not is_sys_exit:
                print( traceback.format_exc() )
                if sys.version_info < ( 3,0 ):
                    raw_input( "Press return to continue" )
                else:
                    input( "Press return to continue" )
                sys.exit( 1 )
        if is_sys_exit:
            print( "SystemExit Exception was caught." )
        sys.exit( ret_val )

所以,从client.py有另一个脚本client_new.py正在使用子进程调用,但是当执行client.py时,它只打印其数据并且不显示client_new的打印。因此,我没有得到client_new.py的调用我做错了什么。请帮助我缺少什么。

2 个答案:

答案 0 :(得分:1)

提供它们都在同一目录中(或者它们位于python查找的目录中(我相信称为PYTHONPATH)),它相对简单。要导入python文件,只需删除.py并导入即可。因此,您只需要以下代码。

import client_new
#Write rest of the code here
client_new.run_function()

您还需要在client_new中略微更改代码,以便它可以正常工作。

import traceback
def main():
    print "inside client new"

def run_function():
    is_sys_exit = False
    ret_val = 0
    try:
        ret_val = main()
    except SystemExit:
        is_sys_exit = True
    except:
        if not is_sys_exit:
            print( traceback.format_exc() )
            if sys.version_info < ( 3,0 ):
                raw_input( "Press return to continue" )
            else:
                input( "Press return to continue" )
            sys.exit( 1 )
    if is_sys_exit:
        print( "SystemExit Exception was caught." )
    sys.exit( ret_val )

if __name__ == "__main__": #This is only run if called as an external script.
    run_function()

答案 1 :(得分:1)

如果您可以控制client_new.py模块,我强烈建议A. N.其他人的回答。如果您还没有,请将main()中的client.py功能更改为:

def main():
    print 'inside client' 
    proc = subprocess.Popen('C:/client_new.py', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout = proc.stdout.read()
    stderr = proc.stdout.read()
    print 'Got output from client_new:\n' + stdout
    if stderr:
        print 'Got error output from client_new:\n' + stderr

附注:如果可以避免,请不要在子进程中使用shell=True。使用subprocess.Popen(['client_new.py'], ...)