Python 如何获取交互式命令行的输出?

2015-01-07 15:36:23 +08:00
 Delbert


先运行命令1,数据处理大约需要半分钟的时间,
之后依次输入要处理的数据2并获取输出3.

2和3这两个多次重复。

试过os.system Popen 还有subprocess好像都不能在1之后再输入2,无法交互式处理命令行,也就无法获取到3

不知道各位遇到这种情况是如何处理的……
8590 次点击
所在节点    Python
6 条回复
mengjue
2015-01-07 15:42:52 +08:00
try pexpect module
clino
2015-01-07 15:43:15 +08:00
subprocess 可以啊,往 stdin 里面写不就行了吗?
Delbert
2015-01-07 16:17:37 +08:00
@clino
@mengjue
```python
concept_file = open('concepts.txt', 'rt')
p = Popen('./distance vectors.bin', stdin=PIPE,stdout=PIPE, bufsize=1)
time.sleep(30)
word = concept_file.readline()
print(word)
Popen.stdin = word
Popen.stdin = 'EXIT'
print(p.stdout.readlines())
concept_file.close()
```
之后就卡住了,一动不动,换成read()和readline()也都一样。。。。
clino
2015-01-07 16:26:29 +08:00
问题出在 readlines
https://docs.python.org/2/library/stdtypes.html#file.readlines
这个借口是一直阻塞直到读完的

你用楼上提到的 pexpect 吧,这个是专门做这种用途的吧
brickgao
2015-01-07 23:51:11 +08:00
word2vec 的话,有人做了 python 的接口

https://pypi.python.org/pypi/word2vec
Delbert
2015-01-08 21:43:12 +08:00
@brickgao 郁闷死了。今天装了一整天的这个……
这个需要numpy,作者github上没写。
numpy在python2.7上死活装不上,
在Python3.4上通过make gcc好不容易装上了
word2vec直接import不进去。而且里面的函数是2.x的,我看到有xrange了……不一定能用……唉

我把这个改改。
多谢啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/160005

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX