Wpadłem w niecodzienną sytuację. Próbuję skryptu interaktywnej konsoli (dla celów dydaktycznych/testowanie), a ja próbowałem następujące:Skąd pochodzi interaktywny monit Pythona ">>>"?
$ python > /dev/null
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print 3
>>>
3
nie jest drukowana, tak wyraźnie wszystko inne było na stderr
. Jak na razie dobrze. Ale potem przekierować stderr
:
$ python 2> /dev/null
>>> print 3
3
>>>
Jak monit być drukowane w obu przypadkach?
EDYCJA: Przekierowanie zarówno stdout
jak i stderr
nie powoduje absolutnie nic do wydrukowania. Tak więc Python wyraźnie "wybiera" jedną z stdout
lub . Czy to udokumentowane? Nie mogłem zrozumieć, jak to się dzieje w kodzie źródłowym Pythona.
Huh, to dziwne. Być może sprawdza "isatty"? – delnan
To byłby mój domysł, ale nie mogę się domyślić, gdzie Python to robi. Najdziwniejszą rzeczą jest to, że 'PyOS_StdioReadline', funkcja, która wydaje się być odpowiedzialna za czytanie danych wejściowych, jest zakodowana na stałe, aby wydrukować monit na' stderr'. Jeśli 'stderr' zostanie przekierowany na' stdout', jak sugeruje drugi przykład, powinniśmy zobaczyć baner. – nneonneo
Łatwiej byłoby użyć narzędzia zaprojektowanego do nauczania Pythona, np. [Funkcja notebooka w ipython] (http://ipython.org/notebook.html). –