从os命令python创建列表

时间:2016-11-09 11:17:42

标签: python

我试图将file.txt的内容存储到列表

cat file.txt
dm-3
dm-5
dm-4
dm-2

这是我的剧本:

#!/usr/bin/python
import os
import json
drives = os.system("cat file.txt")
for i in drives:
  print(i)

我收到以下错误:

   Traceback (most recent call last):
  File "./lld-disks2.py", line 5, in <module>
    for i in drives:
  TypeError: 'int' object is not iterable

5 个答案:

答案 0 :(得分:2)

os.system返回命令的退出状态代码,而不是其输出。

相反,您应该使用Python内置open

with open('file.txt') as f:
     list_of_lines = f.readlines()

答案 1 :(得分:2)

如果要返回命令输出,请使用popen代替os.system

import subprocess

proc = subprocess.Popen(["cat", "file.txt"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print "output:", out

但我认为@ Fejs的答案更好。

答案 2 :(得分:1)

来自docs

  

os.system(command)
  在子shell中执行命令(字符串)。这是通过调用标准C函数系统()来实现的,并且具有相同的限制。对sys.stdin等的更改不会反映在已执行命令的环境中。

     

在Unix上,返回值是以wait()指定的格式编码的进程的退出状态。请注意,POSIX没有指定C系统()函数的返回值的含义,因此Python函数的返回值是依赖于系统的。

您可能只需要open该文件和readlines()This这个问题完美地证明了这一点。

答案 3 :(得分:1)

os.system以整数形式返回退出状态,这就是您收到此错误的原因。我建议您使用open命令读取文件,而不是使用input_file = open(filename) for line in input_file.readlines(): do_something() 。 像这样:

{{1}}

答案 4 :(得分:1)

os.system函数不会返回您运行的命令的输出,而是返回退出代码。来自documentation

  

返回值是流程的退出状态

如果您想获取文件内容,请改用openclose