เอาต์พุตเชลล์แปลก ๆ เมื่อใช้ IPython 5


37

ฉันเพิ่งอัพเกรดเป็น IPython เวอร์ชั่นล่าสุดและตอนนี้มีบางอย่างผิดปกติเมื่อใช้งานใน emacs

เมื่อใช้ในขั้วปกติทำงานดี (สีแท็บเสร็จ ฯลฯ ) แต่ทั้งในM-x eshellหรือM-x shellแทนที่จะ outputing In [1]:ก็จริงเอาท์พุท[?12l[?25hและเอาท์พุทจะOut[1][J[?7h[?12l[?25h[?2004l[?7hOut[1]:

อาจเป็นคุณสมบัติบางอย่างของเครื่องเทอร์มินัลที่ไม่สามารถใช้ได้กับ emacs ที่ใช้โดย IPython แต่ฉันต้องการทราบว่าเป็นรุ่นใด

Terminal.app:

In [1]: 2+2
Out[1]: 4

Emacs

[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4

คุณเปิดบั๊กต้นน้ำหรือไม่ ฉันไม่พบอะไรเลย แต่มันก็ยากที่จะค้นหา ATM ด้วย Gmane ที่ถูกทำใหม่
rasmus

2
สำหรับการอ้างอิงข้อผิดพลาดต้นน้ำคือ# 25306
npostavs

คำตอบ:


41

IPython 5 มีเทอร์มินัลอินเตอร์เฟสใหม่ซึ่งไม่สามารถใช้งานได้กับเชลล์ที่ด้อยกว่าของ Emacs หากต้องการแก้ไขให้เพิ่มการ--simple-promptตั้งค่าสถานะในคำสั่ง IPython:

(setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "--simple-prompt -i")

จากเอกสาร:

อินเทอร์เฟซใหม่ไม่สามารถใช้งานร่วมกับคุณสมบัติ 'ด้อยกว่าเชลล์' ของ Emacs หากต้องการใช้สิ่งนี้ต่อให้เพิ่มการ--simple-promptตั้งค่าสถานะลงในคำสั่ง Emacs ที่ทำงาน การตั้งค่าสถานะนี้ปิดใช้งานคุณลักษณะส่วนใหญ่ของ IPython โดยพึ่งพา Emacs เพื่อให้สิ่งต่าง ๆ เช่นการทำให้แท็บสมบูรณ์

การอ้างอิง: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1


6
ใช่นั่นคือสิ่งที่ฉันทำในตอนแรกอย่างไรก็ตามการขาดการสนับสนุนหลายบรรทัด (ที่สำคัญที่สุดสำหรับคำจำกัดความของฟังก์ชั่น) ทำให้ฉันเปลี่ยนกลับเป็น ipython 4 ควรสังเกตว่า ipython 5 ทำงานได้ดีกับคำ Mx
ตัวอักษร

3
การตั้งค่าสถานะนี้ยังคงมีประโยชน์มากกับ Elpy python-shell-interpreter-argsแม้ว่าจะผ่านตัวแปร หากคุณยังไม่ได้ลอง Elpy คุณควรลองดู ช่วยให้คุณสามารถเขียนคำนิยามฟังก์ชั่นของคุณในบัฟเฟอร์ที่แยกต่างหากและส่งพวกเขาไปยังล่ามได้อย่างง่ายดายด้วยคำสั่งเดียว ในกรณีนี้คุณสามารถใช้คำสั่งการแก้ไขทั้งหมดของ Emacs และรับเซสชันแบบโต้ตอบ - ดีที่สุดของทั้งสองโลก
Ricardo Lima

1
@ อักษรเหตุผลที่เขียนไว้ในลิงก์ด้วย: พวกเขาเปลี่ยนจากการใช้readlineเป็นprompt_toolkitIPython 5 prompt_toolkitไม่เข้ากันได้กับ Emacs shells ซึ่งทำงานแตกต่างจากterm: เท่าที่ฉันรู้เชลล์รันเทอร์มินัลใบ้ด้วยวัตถุประสงค์ของการทำงานมากขึ้นเช่น บัฟเฟอร์ Emacs มาตรฐานในขณะที่termรันโปรแกรมจำลองเต็มเทอร์มินัลจริง ดูเหมือนว่าเปลือกหอยเข้ากันได้กับreadlineแต่ไม่ใช่กับprompt_toolkitซึ่งจะอธิบายให้แสดงลำดับหนี นับตั้งแต่termรันเทอร์มินัลแบบเต็มมันจะตีความลำดับหนีได้อย่างถูกต้อง
Ricardo Lima

1
ฉันไม่ยอมรับเพราะฉันชอบเก็บฟีเจอร์อื่น ๆ ไว้บางทีอาจใช้โหมดเชลล์อื่นพร้อมฟีเจอร์เพิ่มเติม แต่ฉันเดาว่าฉันจะต้องอยู่กับมัน
ตัวอักษร

1
@CodyChan มันปิดการใช้งานคุณสมบัติของ IPython ที่เกี่ยวข้องกับ UI เช่นความสมบูรณ์สีและอื่น ๆ มันเก็บสิ่งต่าง ๆ เช่นคำสั่งมายากล%, ประวัติอินพุต / เอาท์พุต, คำสั่งเชลล์! คำสั่งช่วยเหลือ ฯลฯ
jpkotta

0

มีวิธีเปิด IPython ใน emacs shell โดยไม่ใช้ --simple-prompt

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

หลังจากนี้คุณควรจะสามารถเปิด ipython โดยตรงใน emacs shell โดยไม่ประสบปัญหาการแสดงผล

ในกรณีของฉันมีอีกหนึ่งปัญหา: ด้วยเหตุผลบางอย่างแม้หลังจากที่การแสดงผลถูกต้องแล้วฉันยังคงไม่สามารถคัดลอก - วางนิยามคลาสแบบหลายบรรทัดโดยตรงไปยัง ipython ใน emacs shell ได้ โซลูชันปัจจุบันของฉันคือใช้คำสั่ง Ipython% paste หากคุณมีแนวทางที่ดีกว่าโปรดแจ้งให้เราทราบ

PS: ฉันใช้ Ubuntu 16.04 มีคนใช้ MacOS กล่าวว่าแบ่ง IPython



มันขัดกับการติดตั้ง ipython
Diogo

ในทางใด มันใช้งานได้ดีสำหรับฉัน
DataHungry

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