我需要执行命令,将其输出保存到文件中,然后读取文件的内容。这就是我到目前为止所做的:
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)
确实使用所需内容创建了文件。但是当我执行脚本时,它只输出[]
答案 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]