Tôi phải nói rằng mã của bạn làm tôi gãi đầu một chút.
Đây là cách tôi sẽ làm điều đó:
#!/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)
Bây giờ, nếu tôi thực thi tập lệnh này, tôi nhận được kết quả này khi tôi KHÔNG truyền đối số, do đó sử dụng fileName
( myFile
) có trong hàm:
./args.py
foo
bar
baz
Hãy kiểm tra lại tập tin myFile
.
cat myFile
foo
bar
baz
Đây là những gì xảy ra khi tôi chỉ định một tệp không có thật:
./args.py foo
Can't open file foo.
Và cuối cùng, khi tôi chỉ định một tệp chính xác làm đối số:
./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
Vấn đề chính với mã của bạn là:
FILENAME = first
Các first
biến có chứa toàn bộ danh sách đó là sys.argv
, bạn không thể mở một tập tin với một yếu tố danh sách như là đối số để (open)
. Kiểm tra này:
#!/usr/bin/env python3
import sys
first = sys.argv
FILENAME = first
with open(FILENAME) as f:
for line in f:
print(f)
Bây giờ khi tôi thực thi, tôi nhận được điều này:
./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']
Ngoài ra, có vẻ như bạn không bao giờ đặt biến filename
.