将标准输出从交互式 python 应用程序传递到 cd 命令(子 shell?)

Passing stdout from interactive python application to cd command (subshell?)

如果我接管 stdout,使用交互式 Python 脚本启动控制台 GUI,例如 cursesurwid;经过一些操作并关闭循环后,我如何 cdstdout 中打印的路径?

例如,

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')

当运行时,按qQ退出urwid循环:

(py27) $ python curses_script.py

/usr/bin

(py27) $

如果这是一个只打印到 stdout 的简单 python 脚本,我可以 cd $(python simple_script.py)。然而,使用上面的方法,这将挂起,因为 python 子外壳无法劫持 stdout 和处理输入。

是否可以在不写入文件的情况下解决这个问题?

无需使用一些 bash 黑魔法,这可以很容易地完成,这是一个可行的解决方案

temp_file=$(mktemp /tmp/curses_script.XXXXXX)
python curses_script.py temp_file
# write to temp file in script...
cd $(cat temp_file)
rm $temp_file