เทอร์มินัล OS-X ทำงานผิดปกติหลังจากใช้งาน Python แบบโต้ตอบ


11

หลังจากรัน python replicate (2.7.10) ในเทอร์มินัล os-x และออกจากเครื่องเทอร์มินัลจะไม่ป้อนข้อมูล echos ที่ป้อนอีกต่อไปแล้วสิ่งแปลก ๆ อื่น ๆ ก็เกิดขึ้น หากฉันทำงานpythonอีกครั้งและexit()ดูเหมือนว่าสถานีจะคืนค่า ตอนนี้ฉันเพิ่งปิดแท็บและเปิดแท็บใหม่ดังนั้นฉันจึงไม่ได้ทดสอบอย่างกว้างขวาง

ฉันเดาว่านี่เกี่ยวข้องกับการตั้งค่าเทอร์มินัล แต่เป็นสิ่งล่าสุดและฉันไม่ได้เปลี่ยนแปลงอะไรที่ฉันจำได้ Python ได้รับการติดตั้งด้วยmacportsหากมีบางสิ่งที่เกี่ยวข้องกับการพึ่งพาที่จับคู่ผิดกับไลบรารีคอนโซลบางตัว 2.7.10 ได้รับการติดตั้งเมื่อไม่นานมานี้และสิ่งนี้ไม่ได้เกิดขึ้นหลังจากการติดตั้ง

ข้อนิ้วและเปิดterminal

[~]: 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`

นอกจากนี้ให้เรียกใช้ไพ ธ อนอีกครั้งและตีctrl-dผลลัพธ์ในผลลัพธ์นี้:

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

ทำไมคุณถึงติดตั้ง Python ผ่าน macports Python v2.7.10 มาพร้อมกับ El Cap และฉันคิดว่า Yosemite ... มีบางอย่างที่คุณได้รับจาก Mac Ports หรือไม่?
Benjamin Schollnick

ทีนี้ใช้ 2.7. อะไรก็ได้มากกว่าของที่จัดส่งด้วย mac ไม่ได้สัมผัสกับงูหลามระบบ (ปัญหามาตรฐานสำหรับยูนิกซ์), รัน 2.7 ด้วยตัวเลือก GIS แบบกำหนดเองที่คอมไพล์ด้วย, ด้วยแพ็คเกจ mgmt สำหรับเหล่านั้น, และ 3.4 ในเวลาเดียวกัน แต่เหตุผลที่แท้จริงที่คุณควรทำคือไม่ใช้ fsck กับระบบไพ ธ อน
Andrew Backer

แอพพลิเคชั่นของ python ทำการจัดการหน้าต่างใด ๆ หรือไม่? (เช่นการใช้คำสาป, NCurses, ฯลฯ )
Benjamin Schollnick

ไม่มีแอปพลิเคชันเพียงพิมพ์pythonแล้วctrl-d
Andrew Backer

คำตอบ:


12

มีข้อผิดพลาดแบบเปิดใน MacPorts เกี่ยวกับปัญหานี้:

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

มีข้อความระบุว่าการติดตั้ง python ด้วยตัวเลือก "+ readline" จะช่วยแก้ไขปัญหาซึ่งฉันได้ตรวจสอบด้วยตัวเอง

sudo port uninstall python27
sudo port install python27 +readline

9
ขอขอบคุณสำหรับการค้นหารายงานข้อผิดพลาดนั้น FWIW, เป็นไปไม่ได้ที่จะถอนการติดตั้ง python27 (แพคเกจจำนวนมากขึ้นอยู่กับมันตามปกติ) ดังนั้นคุณควรสร้างใหม่แทน sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readlineวิ่ง หากแผนผังโลคัลของคุณล้าสมัยแล้วจะไม่มีตัวแปร + readline พร้อมใช้งาน selfupdateจะแก้ไขปัญหาที่
Andrew Backer

8

โหมดเทอร์มินัลถูกตั้งค่าโดยแอปพลิเคชันของคุณเป็นแบบ raw หรือ cbreak และเมื่อออกจากโหมดที่ผิดปกติโหมดจะไม่ถูกกู้คืน โดยเฉพาะอย่างยิ่งคุณลักษณะที่แมปEnterคีย์ (การควบคุม / M หรือการคืนค่าขนส่ง aka) กับการขึ้นบรรทัดใหม่ (การป้อนข้อมูลบรรทัดการควบคุม / J aka) ถูกปิดใช้งานในกรณีนี้ คุณสามารถแก้ไขปัญหาด้วยการส่งคืนโดยป้อน

stty sane

ติดตามโดย controlJ

อย่างน้อยจะให้คุณป้อนคำสั่งอีกครั้งแม้ว่าตัวแก้ไขเช่นbackspaceอาจไม่ได้รับการกำหนดให้กับฟังก์ชั่นปกติของพวกเขา

บางคนอาจแนะนำให้ใช้resetคำสั่ง แต่อาการที่กำหนดไม่เกี่ยวข้องกับสิ่งที่โปรแกรมทำ

สำหรับการอ่านเพิ่มเติม


stty echoดูเหมือนว่าจะแก้ไขปัญหา ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ) ไม่แน่ใจว่าจะดูแลมันทั้งหมด ฉันคิดว่าบางสิ่งผิดปกติกับหลามของฉันเนื่องจากข้อผิดพลาดทางไวยากรณ์ทำให้ฉันต้องขึ้นบรรทัดใหม่เพื่อเริ่มป้อนคำสั่งใหม่ด้วยตนเองและมันก็ไม่ควรเป็นเช่นนั้น
Andrew Backer

แม้ว่านี่จะไม่สามารถแก้ปัญหาได้ แต่อย่างน้อยก็ช่วยให้ฉันสามารถแก้ไขได้หลังจากข้อเท็จจริง ดีพอสำหรับฉันตอนนี้ หากมีวิธีใดที่จะค้นหาสาเหตุที่เกิดขึ้นฉันชอบที่จะรู้
Andrew Backer

1

สิ่งนี้ใช้ได้สำหรับฉัน (ใช้ OSX และ pyenv):

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 2.7.11

ที่มา: https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.