Python 新手,有个关闭终端的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
luxinfl
V2EX    程序员

Python 新手,有个关闭终端的问题

  •  
  •   luxinfl 2020-07-14 10:17:08 +08:00 4866 次点击
    这是一个创建于 1962 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我搞了个一键打卡的脚本,双击后会弹出一个窗口显示运行消息。我想程序执行完自动关闭这个窗口。结果搜遍了百度,就找了这俩命令,结果鸟用没有。

    • os._exit(0)
    • sys.exit(0)

    有什么办法可以解决么

    第 1 条附言    2020-07-14 11:10:48 +08:00

    if name == "main":

    chrome_optiOns= Options() driver = webdriver.Chrome(chrome_optiOns=chrome_options) driver.set_window_size(1000,800) # driver = webdriver.Chrome() try: driver.get("url") ## 省略打卡内容 finally: print('------------------') print('------打卡成功--------') print('------------------') os._exit(0) sys.exit(0) 
    第 2 条附言    2020-07-14 11:16:35 +08:00
    改成.pyw 之后,还是会有窗口,但是窗口的 title 变了,变成了 E:\Python\chromedirver.exe ,这个是驱动所在的路径。而且[15972:8840:0714/111511.285:ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -202 一直会有这个报错的。
    第 3 条附言    2020-07-14 12:14:36 +08:00
    找到方法了

    driver.quit()就行了

    猜测是这个组件的问题
    25 条回复    2020-07-15 16:30:25 +08:00
    ruanimal
        1
    ruanimal  
       2020-07-14 10:23:44 +08:00
    是 windows 吧,那个是系统控制台的窗口,在脚本里是关闭不了的。

    可以把脚本的扩展名改成 pyw, 可以避免这个窗口
    css3
        2
    css3  
       2020-07-14 10:31:00 +08:00
    @luxinfl 你是不是嫌黑框闪的太快了?
    time.sleep(10)
    sys.exit(0)
    或者搞个按键监听,按下 C 键再退出,否则停留在黑框
    css3
        3
    css3  
       2020-07-14 10:33:54 +08:00
    @css3 好像看错楼主问题了
    emm, 我了解的是,正常情况下,执行完就就是闪退出去了啊
    dingwen07
        4
    dingwen07  
       2020-07-14 10:35:47 +08:00
    黑框在执行完肯定会关掉的 除非启动方式不是给 python 传值
    如果用了 gui 那就用 destroy 关掉窗体
    princelai
        5
    princelai  
       2020-07-14 10:36:45 +08:00
    再写个.bat ,调用你的脚本
    Vhc
        6
    Vhc  
       2020-07-14 10:37:24 +08:00
    Python 脚本运行结束会自动关闭窗口的。你确定自己不是写了死循环?
    momo1999
        7
    momo1999  
       2020-07-14 10:55:27 +08:00
    改成 pyw
    luxinfl
        8
    luxinfl  
    OP
       2020-07-14 11:05:33 +08:00
    @ruanimal 我试了 pyw,也没什么用啊。python 的窗口还是会出来的
    luxinfl
        9
    luxinfl  
    OP
       2020-07-14 11:06:16 +08:00
    @css3 没有关闭啊,我卡打完了,窗口还是会一直在那里
    misaka19000
        10
    misaka19000  
       2020-07-14 11:11:09 +08:00
    Windows 执行完毕 cmd 会自动关闭了
    luxinfl
        11
    luxinfl  
    OP
       2020-07-14 11:11:28 +08:00
    @Vhc 我把代码贴出来了,就简单的一步步往下写的啊
    luxinfl
        12
    luxinfl  
    OP
       2020-07-14 11:11:47 +08:00
    @misaka19000 就是没关闭,所以才想问问咋回事
    nonduality
        13
    nonduality  
       2020-07-14 11:25:06 +08:00
    你可以尝试获取窗口进程的 pid 号,在退出前 kill 之。
    MerlinShieh
        14
    MerlinShieh  
       2020-07-14 11:35:57 +08:00
    一般执行完就会关闭掉的,如果不行的话可以写个 bat 去执行脚本,再不行就获取 pid 然后 kill
    luxinfl
        15
    luxinfl  
    OP
       2020-07-14 11:36:39 +08:00
    @MerlinShieh bat 试过了,打包成 exe 也试了,都不行。。感觉只能 kill 了。。
    oahebky
        16
    oahebky  
       2020-07-14 12:23:07 +08:00 via Android   6
    无语,我就说早上第一次点卡这个帖子看着奇怪。理论上不可能发生的事情没法回答。

    原来说的是调用 selenium 后「浏览器」窗口没有关闭的问题。

    搞得神神秘秘的,selenium 不说,「浏览器」也不说;提问题,问题都描述不清楚。
    bonfy
        17
    bonfy  
       2020-07-14 13:14:52 +08:00
    ```python
    optiOns= webdriver.ChromeOptions()
    options.add_argument('headless')
    options.add_argument('--disable-gpu')
    executable_path = CONFIG.get('driverpath')
    driver = webdriver.Chrome(
    chrome_optiOns=options, executable_path=executable_path
    )

    ...
    driver.close()
    ```

    最好还是用 api 之类的吧
    css3
        18
    css3  
       2020-07-14 13:47:35 +08:00
    @oahebky ,对头
    ruanimal
        19
    ruanimal  
       2020-07-14 14:19:07 +08:00
    @oahebky 看来提问的基本修养很重要啊。。。
    luxinfl
        20
    luxinfl  
    OP
       2020-07-14 15:41:23 +08:00
    @oahebky nono 不是浏览器窗口没关闭的问题。不过你硬要这么说也没啥问题,程序还没跑完,python 的命令行窗口还是一直在显示。现在在代码后面调用了 driver 的 quit 方法,程序就结束了,命令行窗口和浏览器就都关闭了
    luxinfl
        21
    luxinfl  
    OP
       2020-07-14 15:42:36 +08:00
    @bonfy 我最后调用了 driver.quit()方法。网上呢,一直在说什么 os.exit(),system.exit(),根本就没啥用。
    ungrown
        22
    ungrown  
       2020-07-14 16:54:02 +08:00
    @luxinfl #21
    这不是网上提供的信息不对,也不是你使用网上信息的方法不对,是你弄错了导致问题的原因。
    上面 @oahebky #16 提到浏览器没关闭导致流程被阻塞,不管其叙述是否覆盖了所有细节,思路没有错。
    你在 python 进程里起了一个浏览器的 driver,那么这个 driver 不关闭的话,当然是要阻塞后续代码的,那两行 exit 的代码压根没有机会被运行。
    如果你把 driver 退出的话,exit 就不需要了,实际上我们平时写的东西也很少去用 exit 的,因为代码跑完了,python 会自动退出,不需要 exit 。exit 一般用在特殊场景下,需要在程序运行过程中、尚未结束的时候退出,才会用到。
    冰箱门还没关,却一个劲在那琢磨为什么冰箱里面的灯还不灭呢?我明明已经把要拿的东西拿出来了呀……
    所以你这属于基本概念不扎实导致的,因果链没建立,所以才会既不知道怎么来的也不明白怎么没的。
    Gakho
        23
    Gakho  
       2020-07-14 17:15:59 +08:00
    @luxinfl #21 。。。怎么说呢,应该是基础导致了提问题的要点都不对了,用到了 selenium 都能只口不提
    luxinfl
        24
    luxinfl  
    OP
       2020-07-15 16:29:49 +08:00
    @ungrown 确实基本概念不太扎实。刚写一两天。而且我是看到我最后的 print ()方法是执行的了,所以我会认为代码已经跑到后面。
    luxinfl
        25
    luxinfl  
    OP
       2020-07-15 16:30:25 +08:00
    @Gakho 所以我怕我提的问题不清晰,我把代码都贴出来了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5216 人在线   最高记录 6679      Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:11 PVG 16:11 LAX 00:11 JFK 03:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86