我正在尝试编写一个命令行参数,它将接受一个文件名,然后尝试在 Linux 命令行中打开该文件并读取该文件的内容,如果没有传递参数,它将只打开代码中预先定义的文件。目前当我去运行 python file.py /home/Desktop/TestFile 时
我收到错误:无法识别的参数:
def openfile():
first = sys.argv
for arg in sys.argv:
FILENAME = first
if len(arg) != 1:
with open(filename) as f:
else:
with open(FILENAME) as f:
答案1
我不得不说你的代码让我有点摸不着头脑。
我将这样做:
#!/usr/bin/env python3
import sys
def myOpen(aList):
fileName = "myFile"
if len(aList) > 1:
fileName = aList[1]
try:
with open(fileName) as f:
for line in f:
print(line, end="")
except IOError:
print("Can't open file " + fileName + ".")
myOpen(sys.argv)
现在,如果我执行这个脚本,当我不传递参数时,我会得到这个结果,因此使用函数中的fileName
( ):myFile
./args.py
foo
bar
baz
让我们仔细检查一下该文件myFile
。
cat myFile
foo
bar
baz
当我指定一个虚假文件时,会发生以下情况:
./args.py foo
Can't open file foo.
最后,当我指定正确的文件作为参数时:
./args.py vmstat.txt
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2419392 76200 642712 0 0 25 10 20 62 0 0 99 1 0
您的代码的主要问题是:
FILENAME = first
该first
变量包含整个列表,也就是说sys.argv
,您无法打开以列表元素作为参数的文件(open)
。看一下这个:
#!/usr/bin/env python3
import sys
first = sys.argv
FILENAME = first
with open(FILENAME) as f:
for line in f:
print(f)
现在当我执行时,我得到这个:
./faultyArgs.py myFile
Traceback (most recent call last):
File "./faultyArgs.py", line 8, in <module>
with open(FILENAME) as f:
TypeError: invalid file: ['./faultyArgs.py', 'myFile']
另外,似乎您从未设置过变量filename
。
答案2
#!/usr/bin/env python
import sys
def openfile(fn):
file = open(fn, "r")
out = file.read()
print out
file.close()
openfile(sys.argv[1])
尝试一下,这会起作用,至少可以将文件读取到终端