Potrzeba:Jak uruchomić proces z limitu czasu i wciąż stdout przy starcie
- Timeout po X sekund, a zabić proces (i wszystkie procesy on otwarty), jeśli limit czasu osiągnął przed zakończeniem procesu wdzięcznie .
- Odczytywanie bieżących wyników w czasie wykonywania.
- Pracuj z procesami, które produkują dane wyjściowe, które nie wytwarzają danych wyjściowych, a następnie przestań je produkować (np. Zablokuj ).
- Uruchom w systemie Windows.
- Uruchom na Pythonie 3.5.2.
Moduł podprocesu Python 3 ma timeout wbudowany, a także próbowałem i zaimplementowałem timeout sam używając timera i używając wątków, ale nie działa z wyjściem. readline()
blokuje się czy nie? readlines()
zdecydowanie czeka na zakończenie procesu, zanim wyplunie wszystkie dane wyjściowe, co nie jest tym, czego potrzebuję (potrzebuję w toku).
Jestem blisko przełączania node.js :-(
Problem ze stdout może dotyczyć procesu potomnego. Jeśli bufor standardowy nie zostanie przepłukany, python nigdy nie odbierze zawartości (i będzie to taki sam język, jakiego używałeś). Jednym możliwym rozwiązaniem (nieprzetestowanym) byłoby "podproces.popen", aby przypisać standardowe wyjście dziecka do stderr. Zwykle stderr jest niebuforowany. – cdarke
Tak, 'readline' będzie blokował, czekając na odebranie następnego wiersza, podobnie jak cokolwiek innego, co czyta' sys.stdin'. Możesz powiedzieć Pythonowi, aby 'sys.stdout' był niebuforowany przez podanie opcji' -u' w wierszu poleceń. –
Nikt się nie przejmuje, jeśli przełączysz się na node.js ... – martineau