2016-11-09 140 views
2

我有一个python “client.py” 脚本如下:如何从不同的python脚本调用python脚本?

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的调用。请帮助我失踪。

+3

为什么要在子进程中调用另一个脚本,而不是简单地'导入'并重新使用它的功能? – jonrsharpe

+0

@jonrsharpe其实我不知道该怎么做,请你告诉 – Learner

回答

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() 
+0

http://stackoverflow.com/questions/2349991/python-how-to-import-other-python-files可能会有所帮助,另外... –

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 

边注:不subrocess使用shell=True如果能够避免它。使用subprocess.Popen(['client_new.py'], ...)