• 0

Python, Keyboard Interrupt, and Windows


Question

So I'm writing my own launcher for youtube-dl just for my own personal use, and to familiarize myself with Python a little bit more.  When I run it in Linux, it works normally, and if I cancel a download with CTRL+C, the "Interrupted by User" error message appears.  If I run it in Windows, it works normally, except the "Interrupted by User" error message does not appear when I cancel a download with CTRL+C.  The other error messages such as the "Invalid URL" one works, so I know it's making down into the "elif download is not 0:" portion, but that one error message doesn't appear.

 

It's not the end of the world, and I'm suspecting this has something to do with the way Windows, or the Windows version of youtube-dl, handles the CTRL+C keyboard interrupt.  Here's the block of code that launches the download and then displays messages according to the outcome.

 

Code Snippet

 

If you have issues opening the link let me know and I'll re-do it, but Neowin's code bracket didn't recognize any of the indentions, and it looked a bit confusing, so I thought this would be easier to read.

3 answers to this question

Recommended Posts

  • 0

Even if a keyboard interrupt spit out an error code other than the "2" specified, it should still get caught by the "else" statement that issues the "Unknown error" window, but not even that comes up, it just cancels the download but doesn't tell the user anything.

  • 0

You need to wrap your code in a try..except and catch KeyboardInterrupt
 

try:
    <yourcode>
except KeyboardInterrupt as e:
    print(e)

other tips:

1. I wouldn't use "is" to compare numbers, use "==". The reason this works is that for performance reasons CPython creates objects for the first 256 ints and uses them whenever you have a value in that range.
The only time you tend to use "is" is when you want to check if something is None (by "is None").

2. Also avoid "is" for strings, use "==" instead, it should only work if those strings are interned. See http://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs for some more information.

3. os.system works, but you should probably replace it with subprocess.call. The subprocess module has more features and is intended to be a replacement for a number of older modules and functions (including os.system).

 

4. Use os.path to manipulate your paths to reduce the chance of errors

  • 0

You probably should just setup a signal handler for your main process: http://docs.python.org/2/library/signal.html, use subprocess.popen().wait(), and then manually terminate the process if SIGINT is sent. The reason being is that this will make termination handling consistent across platforms.

 

If you go with the exception solution you may or may not need to terminate the subprocess manually in Windows. Another thing to note is that there are subtle differences in interrupt behavior between os.system() and subprocess.call(): http://stackoverflow.com/questions/18739821/keyboard-interrupts-and-os-system-vs-subprocess-call that can affect you depending on what you are doing.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • MacBook Air M3 with 512GB SSD and 16GB RAM is now available for just $899 by Taras Buria Apple is infamous for its eye-watering storage and RAM upgrade prices in Macs, iPads, and iPhones. However, there is no denying that the company makes great hardware, especially for Macs with their powerful and efficient chips. If you want an affordable Mac with more than just 256GB of storage, check out this deal on the 2024 MacBook Air M3 with 512GB SSD and 16GB of RAM, which is now available for only $899 ($600 off the original MSRP). The MacBook Air needs no introduction. This 13-inch laptop with a full-metal body has a solid Liquid Retina display, a powerful eight-core M3 processor with a 10-core graphics, and a battery that lasts all day (Apple claims up to 18 hours of video playback). The chip supports Apple Intelligence features such as image generation, writing tools, ChatGPT integration with Siri, and more. It can also drive two external 5K displays with the lid closed (or one display with the lid open). The laptop also has a backlit keyboard with a fingerprint sensor, a massive haptic trackpad, a 1080p webcam (in the notch), and a powerful quad-speaker audio system with Spatial Audio support. Available ports include MagSafe for magnetic charging, a headphone jack, and two Thunderbolt 4 Type-C ports. All of that is packed into a half-inch-thick lightweight chassis that is easy to carry around. 2024 13-inch MacBook Air M3, 16GB, 512GB - $899 | 31% off on Amazon This Amazon deal is US-specific and not available in other regions unless specified. If you don't like it or want to look at more options, check out the Amazon US deals page here. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • This game is already dead and we all know it. "delayed indefinitely" my a**...
    • That's why it really depends to what extent they've tweaked it and if you can just easily switch to full Windows if you want. I'm sure lots of people who just game on their devices with some light web browsing etc, would love to have this Xbox version as a option though. It really depends on what you do with your device. Maybe they're only going to offer it to specific gaming devices like handhelds or mini-PCs you can put under your TV?
  • Recent Achievements

    • First Post
      Ian_ earned a badge
      First Post
    • Explorer
      JaviAl went up a rank
      Explorer
    • Reacting Well
      Cole Multipass earned a badge
      Reacting Well
    • Reacting Well
      JLP earned a badge
      Reacting Well
    • Week One Done
      Rhydderch earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      665
    2. 2
      ATLien_0
      267
    3. 3
      Michael Scrip
      217
    4. 4
      +FloatingFatMan
      188
    5. 5
      Steven P.
      145
  • Tell a friend

    Love Neowin? Tell a friend!