0
如果我通過啓動控制檯GUI的交互式Python腳本接管stdout
,例如curses
或urwid
;經過一些動作並關閉循環後,我怎麼可能cd
打印到stdout
?將stdout從交互式python應用程序傳遞到cd命令(subshell?)
例如,
import sys
import urwid
def check_for_q(key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
txt = urwid.Text(u"Thanks for helping")
fill = urwid.Filler(txt, 'top')
loop = urwid.MainLoop(fill, unhandled_input=check_for_q)
loop.run()
sys.stdout.write('/usr/bin')
在運行的時候,按下q
或Q
退出urwid
循環:
(py27) $ python curses_script.py
/usr/bin
(py27) $
如果這是一個簡單的Python腳本,只印到stdout
,我可以cd $(python simple_script.py)
。但是,有了上述內容,這將會因爲python子shell無法劫持stdout
和處理輸入而掛起。
是否可以在不寫入文件的情況下解決此問題?
我已前是創建一個小bash腳本包裹Python腳本的方法。 bash腳本創建一個臨時文件或命名管道,將該文件的路徑作爲命令行參數提供給python腳本,然後在python腳本完成時讀取並隨後刪除該文件。 – jme
@jme我寧願避免依賴創建臨時文件並在以後刪除它們。我以前從未使用過命名管道,並會查看它們。一個例子來說明將是太棒了! – Kappers
爲什麼你想避免創建臨時文件?以這種方式使用文件與Unix哲學非常一致。此外,命名管道本質上是文件(在這個網站上有幾個使用它們的例子)。 – jme