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 firstbiế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.