繁体   English   中英

程序退出后继续执行

[英]Program continues to execute after exit

从用户读入IP地址后,如果无效,我想退出。 似乎在退出之前继续执行该函数中的代码。 我希望它立即退出。 我什至尝试在期望中使用quit()和exit(),但是都具有相同的结果。

功能:

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  raise SystemExit(SE)

 print 'Everything is OK!'

主要:

validation = f_validate_args(io_args)

print(io_args)

使用无效的IP运行程序:

Everything is OK
illegal IP address string passed to inet_aton

使用有效IP运行程序:

Everything is OK!
Namespace(...)

您可以尝试使用os.system软件包,从bash中杀死它:

import os

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  os.system('pkill your_program_name')
  raise SystemExit(SE)

可能有一些资源(与套接字相关)会阻止程序正常退出。

也许很脏,但一定可以正常工作:致电os._exit 它调用低级exit而不使用sys.exit使用的异常机制。

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except socket.error as SE:
  print(str(SE))
  os._exit(1)

 print('Everything is OK!')

当然,python没有机会优雅地退出。 仅当您不能这样做时,才这样做。

如果提供了无效的IP,该函数将引发OSError。 因此,您需要抓住它

def f_validate_args(test_args):
 try:
  socket.inet_aton(test_args.server)
 except OSError:
  # your error handling here
 except socket.error as SE:
  raise SystemExit(SE)

 print 'Everything is OK!'

来源: https//docs.python.org/3/library/socket.html#socket.inet_aton

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM