我有一个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的调用我做错了什么。请帮助我缺少什么。
答案 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'], ...)