Skip to content

Instantly share code, notes, and snippets.

Last active March 17, 2023 06:29
  • Star 37 You must be signed in to star a gist
  • Fork 15 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Enables to run subprocess commands in a different thread with TIMEOUT option!
#! /usr/bin/env python
import threading
import subprocess
import traceback
import shlex
class Command(object):
Enables to run subprocess commands in a different thread with TIMEOUT option.
Based on jcollado's solution:
command = None
process = None
status = None
output, error = '', ''
def __init__(self, command):
if isinstance(command, basestring):
command = shlex.split(command)
self.command = command
def run(self, timeout=None, **kwargs):
""" Run a command then return: (status, output, error). """
def target(**kwargs):
self.process = subprocess.Popen(self.command, **kwargs)
self.output, self.error = self.process.communicate()
self.status = self.process.returncode
self.error = traceback.format_exc()
self.status = -1
# default stdout and stderr
if 'stdout' not in kwargs:
kwargs['stdout'] = subprocess.PIPE
if 'stderr' not in kwargs:
kwargs['stderr'] = subprocess.PIPE
# thread
thread = threading.Thread(target=target, kwargs=kwargs)
if thread.is_alive():
return self.status, self.output, self.error
Copy link

command = Command('ping -t')
print, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)

Not work on Window7, Python 2.7.

Copy link

kirpit commented Dec 29, 2012

all these complains should be satisfied now with the latest revision.

it should also be able to run commands even though no shell=True argument provided, which is done by shlex splitting..

Copy link

I use the cmd to start a java program. I find that the thread will keep running after thread.join()

Copy link

Now we can use timeout in Ubuntu 10.04 and later versions happily.

Copy link

onkar27 commented Jul 3, 2017 is

class Solution{
      public static void main(String [] args){ 


command = Command("java Solution")
print, shell=True ,stderr=subprocess.STDOUT, stdout=subprocess.PIPE)

Timeout does not works !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment