从python启动nano作为子进程,捕获输入

ale*_*cwh 3 python subprocess pipe popen

我正在尝试从Python内部启动文本编辑器(nano),让用户输入文本,然后在写出后捕获文本(Control-O).我之前没有使用过该subprocess模块,也没有管道,所以我不知道下一步该尝试什么.

到目前为止,我有这个代码:

a = subprocess.Popen('nano', stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)

a应该在哪里捕获输出.但是,这段代码并没有带来nano,而是让python终端表现得很奇怪.上下键(历史记录)停止工作,退格键变得不正常.

有人能指出我正确的方向来解决这个问题吗?我意识到我可能需要阅读Python中的管道,但我能找到的唯一信息是pipes模块,它没有多大帮助.

Ale*_*lli 8

Nano中的Control-O写入正在编辑的文件,即不是标准输出 - 因此,放弃尝试捕获stdout并在用户将其写出并退出Nano后读取文件.例如,在我的Mac上:

>>> import tempfile
>>> f = tempfile.NamedTemporaryFile(mode='w+t', delete=False)
>>> n = f.name
>>> f.close()
>>> import subprocess
>>> subprocess.call(['nano', n])
Run Code Online (Sandbox Code Playgroud)

在这里,我写了"Hello world!" 然后点击控制-O返回控制-X,和:

0
>>> with open(n) as f: print f.read()
... 
Hello world!


>>> 
Run Code Online (Sandbox Code Playgroud)