我试图将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
答案 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)