V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
luxinfl
V2EX  ›  程序员

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

  •  
  •   luxinfl · Jul 14, 2020 · 5135 views
    This topic created in 2113 days ago, the information mentioned may be changed or developed.

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

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

    有什么办法可以解决么

    Supplement 1  ·  Jul 14, 2020

    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)
    
    Supplement 2  ·  Jul 14, 2020
    改成.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 一直会有这个报错的。
    Supplement 3  ·  Jul 14, 2020
    找到方法了

    driver.quit()就行了

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

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

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

    搞得神神秘秘的,selenium 不说,「浏览器」也不说;提问题,问题都描述不清楚。
    bonfy
        17
    bonfy  
       Jul 14, 2020
    ```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  
       Jul 14, 2020
    @oahebky 😂😂😂😂,对头
    ruanimal
        19
    ruanimal  
       Jul 14, 2020
    @oahebky 看来提问的基本修养很重要啊。。。
    luxinfl
        20
    luxinfl  
    OP
       Jul 14, 2020
    @oahebky nono 不是浏览器窗口没关闭的问题。不过你硬要这么说也没啥问题,程序还没跑完,python 的命令行窗口还是一直在显示。现在在代码后面调用了 driver 的 quit 方法,程序就结束了,命令行窗口和浏览器就都关闭了
    luxinfl
        21
    luxinfl  
    OP
       Jul 14, 2020
    @bonfy 我最后调用了 driver.quit()方法。网上呢,一直在说什么 os.exit(),system.exit(),根本就没啥用。
    ungrown
        22
    ungrown  
       Jul 14, 2020
    @luxinfl #21
    这不是网上提供的信息不对,也不是你使用网上信息的方法不对,是你弄错了导致问题的原因。
    上面 @oahebky #16 提到浏览器没关闭导致流程被阻塞,不管其叙述是否覆盖了所有细节,思路没有错。
    你在 python 进程里起了一个浏览器的 driver,那么这个 driver 不关闭的话,当然是要阻塞后续代码的,那两行 exit 的代码压根没有机会被运行。
    如果你把 driver 退出的话,exit 就不需要了,实际上我们平时写的东西也很少去用 exit 的,因为代码跑完了,python 会自动退出,不需要 exit 。exit 一般用在特殊场景下,需要在程序运行过程中、尚未结束的时候退出,才会用到。
    冰箱门还没关,却一个劲在那琢磨为什么冰箱里面的灯还不灭呢?我明明已经把要拿的东西拿出来了呀……
    所以你这属于基本概念不扎实导致的,因果链没建立,所以才会既不知道怎么来的也不明白怎么没的。
    Gakho
        23
    Gakho  
       Jul 14, 2020
    @luxinfl #21 。。。怎么说呢,应该是基础导致了提问题的要点都不对了,用到了 selenium 都能只口不提
    luxinfl
        24
    luxinfl  
    OP
       Jul 15, 2020
    @ungrown 确实基本概念不太扎实。刚写一两天。而且我是看到我最后的 print ()方法是执行的了,所以我会认为代码已经跑到后面。
    luxinfl
        25
    luxinfl  
    OP
       Jul 15, 2020
    @Gakho 所以我怕我提的问题不清晰,我把代码都贴出来了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3226 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 13:42 · PVG 21:42 · LAX 06:42 · JFK 09:42
    ♥ Do have faith in what you're doing.