[英]Start nano as a subprocess from python, capture input
我正在尝试从Python内部启动文本编辑器(nano),让用户输入文本,然后在写出后捕获文本(Control-O)。 我以前没有使用过subprocess
模块,也没有管道,所以我不知道下一步该尝试什么。
到目前为止,我有这个代码:
a = subprocess.Popen('nano', stdout=subprocess.PIPE, shell=True)
凡a
应捕获输出。 但是,这段代码并没有带来nano,而是让python终端表现得很奇怪。 上下键(历史记录)停止工作,退格键变得不正常。
有人能指出我正确的方向来解决这个问题吗? 我意识到我可能需要阅读Python中的管道,但我能找到的唯一信息是pipes
模块,它没有多大帮助。
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])
在这里,我写了“Hello world!” 然后点击控制-O返回控制-X,和:
0
>>> with open(n) as f: print f.read()
...
Hello world!
>>>
我不确定你能捕捉到用户输入nano
。 毕竟,这是纳米的工作。
你可以(我认为应该做的)从编辑器获取用户输入是用一个临时文件产生它。 然后当用户输入他想要的内容时,他会保存并退出。 您的程序从文件中读取内容,然后将其删除。
只是使用os.system
生成编辑器。 您的终端表现得很有趣,因为nano是一个全屏程序,并将使用终端转义序列(可能通过.curses)操纵屏幕和光标。 如果你将它连接到一个终端,那么它就会行为不端。
此外,你应该考虑打开$EDITOR
如果它是定义而不是纳米。 这就是人们所期望的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.