2014-07-25 42 views
0

我想從一個SCons SConstruct腳本調用ct-ng(http://crosstool-ng.org/),所以基本上來自python。使用python subprocess.call()來啓動一個ncurses進程

使用下面的方法:

ret = subprocess.call(["/mnt/build/pw_build/crosstool-ng/bin/ct-ng menuconfig"], env=env_cross,shell=True) 

的crosstool-NG使用ncurses的與菜單向用戶呈現:

enter image description here

不幸的是試圖瀏覽菜單時我得到:

enter image description here

使用cat命令來顯示序列使用箭頭鍵我看的時候:

:/mnt/build$ cat > /dev/null 
^[OA^[OD^[OB^[OC^[OA^[OB^[OD^[OC^[OA^[OB 

它看起來像是被剝可能從序列中的轉義字符。

當我從終端的命令行調用ct-ng腳本時,它正常工作,當我使用subprocess.call()調用它時,情況變糟。

我的環境包括:

  • XFCE4端0.6.3
  • Linux的3.13.0-32,低延時#57,Ubuntu的SMP PREEMPT週二7月15日4時08分59秒 UTC 2014 x86_64的x86_64的x86_64的GNU/Linux的
  • 的Python 2.7.6
  • NCURSES_VERSION 「5.9」
  • GNU使3.81
  • crosstool-NG版本1.19.0

是我所看到的一個已知問題?還有什麼我應該做的?

UPDATE: 感謝埃裏克..這讓我0.5F方式有..我現在可以瀏覽菜單,但它仍然留下糞便背後:

enter image description here

+0

你的shell正在解釋你的擊鍵。試試「stty raw; crosstool thingie; stty cooked」。 Raw可能太過於極端,但它可能會驗證問題的原因。 – Eric

+0

好的...試試「stty -echo」(而不是原始的) – Eric

+0

沒有來自-echo的愛,目前嘗試用stty做一些變化... –

回答

1

在Python下運行curses程序我建議您使用pexpect

例如,這裏有一個簡單的程序,啓動vim的副本,添加一些文本,轉義到命令模式,發出:w命令,然後與用戶交互(允許他或她繼續編輯或其他)。然後,控制返回到Python:

#!/usr/bin/env python 
import pexpect 
child = pexpect.spawn("/usr/bin/vim") 
child.send('a\n\nThis is another test.') 
child.send('\x1b') 
child.send(':w! test.txt\n') 
child.interact() 

也可以通過轉義字符,以及用於輸入和輸出到交互方法濾波器功能。但那些有點棘手。

(順便說一下:你可以將你想要的按鍵序列發送到這個ct-ng對話框/菜單中......這只是一個計算這些序列需要用於終端設置的問題,例如在我的iTerm下的MacOS X用TERM = xterm-256color運行一個「向下箭頭」的光標移動出現爲^ [[B([Esc] [Bracket] [B]),這將是'\ x1b [B'作爲Python字符串文字。

0

之後的執行出現了仔細的追蹤一個腳本重定向到導致問題的開球,感謝所有看着問題的人,首先應該看到,首先,對於噪音感到抱歉。

相關問題