OS-X terminali, Python'u etkileşimli olarak çalıştırdıktan sonra garip davranıyor


11

Os-x terminalinde bir python repl (2.7.10) çalıştırıp çıktıktan sonra, terminal artık yankı tipinde bir giriş yapmaz ve başka garip şeyler olur. Eğer pythontekrar exit()koşarsam, terminal geri yüklenir gibi görünüyor. Şimdi sekmeyi kapatıyorum ve yeni bir tane açıyorum, bu yüzden bunu kapsamlı bir şekilde test etmedim.

Sanırım bu terminal ayarları ile ilgili, ama bu son bir şey ve hatırladığım hiçbir şeyi değiştirmedim. Python, macportsbazı konsol kitaplıklarıyla yanlış eşleşen bağımlılıklarla ilgili bir şey varsa yüklenir . 2.7.10 bir süre önce kuruldu ve kurulumdan sonra bu olmadı.

Mafsalları çatlatır ve açarterminal

[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>>       *(press ctrl-d, the 2nd >>> is strange)
[~]:            *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`

Ayrıca, python'u tekrar çalıştırmak ve vurmak ctrl-dbu çıktıda sonuçlanır:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 

Python'u macports üzerinden neden kuruyorsunuz? Python v2.7.10, El Cap ile birlikte geldi ve sanırım Yosemite ... Özellikle Mac Ports'tan aldığınız bir şey var mı?
Benjamin Schollnick

Peki, 2.7. Mac ile gönderilen daha büyük bir şey kullanarak. Sistem python'una (unix'lerde standart sorun) dokunmamak, derlenmiş özel GIS seçenekleriyle 2.7 çalıştırmak, bunlar için mgmt paketi ve aynı zamanda 3.4. Ancak bunu yapmanın asıl nedeni, sistem python'u ile fsck etmemek.
Andrew Backer

Python uygulaması herhangi bir pencere yönetimi yapıyor mu? (örn. Curses, NCurses, vb. kullanma)
Benjamin Schollnick

Hiçbir uygulama, sadece yazarak pythonve sonractrl-d
Andrew Backer

Yanıtlar:


12

MacPorts'ta bu sorunla ilgili açık bir hata var:

https://trac.macports.org/ticket/48807

"+ Readline" seçeneği ile python kurmanın, bunu kendim yaparak doğruladığım sorunu çözdüğünü söylüyor.

sudo port uninstall python27
sudo port install python27 +readline

9
Lanet olsun, bu hata raporunu bulduğun için teşekkürler. FWIW, python27'yi kaldırmak mümkün değildir (normalde çok fazla paket buna bağlıdır), bu nedenle bunun yerine yeniden oluşturmanız gerekir. Koş sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline. Yerel ağacınız güncel değilse + readline varyantına sahip olmayacaktır; selfupdateo çözecektir.
Andrew Backer

8

Terminal modları uygulamanız tarafından raw veya cbreak olarak ayarlanır ve anormal olarak çıkıldığında modlar geri yüklenmez. Özellikle, Enteranahtarı (control / M aka satır başı) yeni satırla (control / J aka satır besleme) eşleyen özellik bu durumda genellikle devre dışı bırakılır. Girerek sorunu geri dönerek düzeltebilirsiniz

stty sane

bunu takiben controlJ

Bu, en azından komutları tekrar girmenize izin verir, ancak gibi düzenleme karakterleri backspacenormal işlevlerine atanmamış olabilir.

Bazıları resetkomutun kullanılmasını da önerebilir , ancak verilen belirtiler bu programın yaptığı ile ilgili değildir.

Daha fazla okuma için


stty echosorunu çözüyor gibi görünüyor ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Her şeyin üstesinden gelip gelmediğinden emin değilim. Sözdizimi hataları, yeni bir komut girmeye başlamak için elle yeni satıra basmamı gerektirdiğinden, bazı şeyleri python'umda biraz yanlış düşünüyorum.
Andrew Backer

Bu sorunu çözmese de, en azından gerçeği sonra düzeltmeme izin veriyor. Şimdilik benim için yeterince iyi. Bunun neden olduğunu öğrenmenin herhangi bir yolu varsa, bilmek isterim.
Andrew Backer

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.