เทอร์มินัล 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.