ten prawdopodobnie został poproszony, ale nie mogę nic odnośnie timeout subprocess.call znaleźć przy użyciu Pythona 2.7Jak ustawić limit czasu podprocesu.call przy użyciu Pythona 2.7.6?
Odpowiedz
W Pythonie 3.3 Timeout argument został dodany.
https://docs.python.org/3/library/subprocess.html#subprocess.call
Dziękujemy za Twoje response.I wiemy, że są przy użyciu Pythona 2.7.6 – user3484496
Można spróbować użyć "easyprocess":
https://github.com/ponty/EasyProcess
Posiada on wiele funkcji, które trzeba jak "timeout".
Można zainstalować subprocess32
modulementioned by @gps - nośnik modułu subprocess
z Python 3.2/3.3 do użytku w wersji 2.x. Działa na Pythonie 2.7 i zawiera obsługę Timeout z Python 3.3.
subprocess.call()
is just Popen().wait()
a zatem przerwać długi proces uruchomiony w timeout
sekund:
#!/usr/bin/env python
import time
from subprocess import Popen
p = Popen(*call_args)
time.sleep(timeout)
try:
p.kill()
except OSError:
pass # ignore
p.wait()
Jeśli proces dziecko może prędzej następnie przenośnym rozwiązaniem jest use Timer()
as suggested in @sussudio's answer:
#!/usr/bin/env python
from subprocess import Popen
from threading import Timer
def kill(p):
try:
p.kill()
except OSError:
pass # ignore
p = Popen(*call_args)
t = Timer(timeout, kill, [p])
t.start()
p.wait()
t.cancel()
Na Unix, ty może use SIGALRM
as suggested in @Alex Martelli's answer:
#!/usr/bin/env python
import signal
from subprocess import Popen
class Alarm(Exception):
pass
def alarm_handler(signum, frame):
raise Alarm
signal.signal(signal.SIGALRM, alarm_handler)
p = Popen(*call_args)
signal.alarm(timeout) # raise Alarm in 5 minutes
try:
p.wait()
signal.alarm(0) # reset the alarm
except Alarm:
p.kill()
p.wait()
Aby uniknąć używania tutaj wątków i sygnałów, moduł subprocess
w Pythonie 3 używa busy loop with waitpid(WNOHANG)
calls on Unix i winapi.WaitForSingleObject()
on Windows.
Prosty sposób, w jaki zawsze wykonywałem limity czasu z 2,7, opóźnia się przy użyciu subprocess.poll()
i time.sleep()
. Oto bardzo prosty przykład:
import subprocess
import time
x = #some amount of seconds
delay = 1.0
timeout = int(x/delay)
args = #a string or array of arguments
task = subprocess.Popen(args)
#while the process is still executing and we haven't timed-out yet
while task.poll() is None and timeout > 0:
#do other things too if necessary e.g. print, check resources, etc.
time.sleep(delay)
timeout -= delay
Jeśli ustawisz x = 600
, wówczas czas oczekiwania wyniesie 10 minut. Podczas gdy task.poll()
zapyta, czy proces został przerwany. time.sleep(delay)
będzie spał przez 1 sekundę w tym przypadku, a następnie zmniejszy czas oczekiwania o 1 sekundę. Możesz bawić się tą częścią do treści swojego serca, ale podstawowa koncepcja jest taka sama w całym tekście.
Mam nadzieję, że to pomoże!
subprocess.poll()
https://docs.python.org/2/library/subprocess.html#popen-objects
To nie robi zabić proces. Musisz dodać os.killpg (os.getpgid (zadanie.pid), signal.SIGTERM) – AaronS
- 1. Jak ustawić limit czasu w recvmmsg()?
- 2. Jak ustawić limit czasu polecenia w SSIS?
- 3. Wyszukiwanie DNS Node.js - jak ustawić limit czasu?
- 4. Jak ustawić limit czasu dla dataWithContentsOfURL: url
- 5. Jak ustawić limit czasu dla IOStream tornada?
- 6. Jak ustawić limit czasu dla TcpClient?
- 7. Jak ustawić limit czasu połączenia w SQLAlchemy
- 8. Jak ustawić limit czasu sesji po zalogowaniu się w passportjs?
- 9. Limit czasu Sitecore przy logowaniu
- 10. Limit czasu sesji rozruchowej:
- 11. Jak ustawić limit czasu połączenia za pomocą OkHttp
- 12. Jak programowo ustawić limit czasu sesji, strony błędów bez web.xml
- 13. Limit czasu gatewaya przy użyciu narzędzia traefik i php fpm
- 14. Limit czasu sesji w RoR przy użyciu narzędzia Devise
- 15. ustawić limit czasu okno dialogowe w Androidzie?
- 16. Python: ulimit i nice dla podprocesu.call/subprocess.Popen?
- 17. Limit czasu dla BackgroundWorker
- 18. Konwersja ciąg sformatowany ciąg daty i czasu przy użyciu Pythona
- 19. Limit czasu oczekiwania WaitForSingleObject
- 20. Ustawić prawdziwy limit czasu na ładowanie strony w Selenium WebDriver?
- 21. Jak ustawić limit czasu dla RestClient w Windows Phone 8?
- 22. Jak ustawić limit czasu przed hakiem w mokka?
- 23. Jak ustawić limit czasu na blokowanie gniazd w asiu?
- 24. Jak ustawić limit czasu utrzymania HTTP na serwerze nodejs
- 25. Jak ustawić limit czasu dla oświadczenia NHibernate LINQ
- 26. Jak ustawić limit czasu w NSURLRequest w iphone
- 27. Jak ustawić limit czasu dla get_file_contents w PHP?
- 28. Jak ustawić domyślny limit czasu Selenium Python WebDriver?
- 29. Jak ustawić limit czasu dla JAX-WS WebService Zadzwoń
- 30. Jak ustawić limit czasu dla klienta JAX-RS z CXF
zajrzeć do: http://stackoverflow.com/questions/1191374/subprocess-with-timeout – Mortezaipo