
我正在嘗試編寫一個命令列參數,它將接受一個文件名,然後嘗試在 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])
嘗試一下,這會起作用,至少可以將檔案讀取到終端