2017-08-25 153 views
0

我很新的python我一直在使用popen执行命令,但我期待多行响应,我需要分别使用每一行。Popen多行读取

我从教程中获得以下代码。

pipe = os.popen('dir') 
     for line in pipe: 
      print '--------------space---------------------' 
      print pipe.readLine() 

,但知道我不断收到以下错误:

AttributeError的:“文件”对象有没有属性“的readLine”

没有人对我有什么建议,或者一个想法如何而是改善这一点。

感谢您的帮助

回答

1

要解决你的语法readline使用L的小写。

但是,我想知道你在做什么。如果你只是想打印每一行,那么你应该改变print pipe.readline() - >print line

import os 
pipe = os.popen('dir') 
for line in pipe: 
    print '--------------space---------------------' 
    print line 

for循环已经在读通过线输出线从popen。事实上,如果您尝试在中期迭代中调用pipe.readline(),那么这是非法的,您的代码将引发异常。

为了说明您可以尝试运行此异常:

import os 
pipe = os.popen('dir') 
for line in pipe: 
    print '--------------space---------------------' 
    print pipe.readline() 
+0

实际上,它会用'readline()'很好的运行,但你只能看到其他所有行。 – glibdud

+0

@glibdud不,它不会。亲自尝试一下。您将看到以下内容,并在python 2.7中测试过:'ValueError:混合迭代和读取方法会丢失数据' –

+0

奇怪的是,我确实尝试过,它对我来说运行良好。 – glibdud

1

使用子模块,它有很多有用的功能与其他进程进行交互。 check_output或call会做这个工作

import subprocess 
output = subprocess.check_output('dir', universal_newlines=True)