如何将shell命令传递到文件中并使用python读取其内容?

时间:2015-03-23 02:11:34

标签: python pipe popen

我需要执行命令,将其输出保存到文件中,然后读取文件的内容。这就是我到目前为止所做的:

file_out = open('if','w')
ls = sp.Popen(["ls","-1","/sys/class/net"],stdout=file_out)
file_out.close()
lines = [line.rstrip('\n') for line in open('if')]
print(lines)

确实使用所需内容创建了文件。但是当我执行脚本时,它只输出[]

1 个答案:

答案 0 :(得分:3)

原因是子进程ls不会立即终止。并且输出尚未写入文件。您可以在读取文件之前添加ls.wait()以确保先前的子进程已经终止

如果您不想与子流程通信,但只想执行它,则可以使用retcode = sp.call(["ls","-1","/sys/class/net"],stdout=file_out)。这样,子进程被确保终止并具有返回码。

如果你只需要输出文件,你可以使用管道,而不需要在文件中保存输出。代码如下:

ls = sp.Popen(["ls","-1","/sys/class/net"],stdout=sp.PIPE)
lines = [line.rstrip('\n') for line in ls.stdout]