Linux
將命令行參數傳遞給 Python
我正在嘗試編寫一個命令行參數,它將採用文件名,然後嘗試打開文件並在 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:
我不得不說你的程式碼讓我有點撓頭。
這是我的做法:
#!/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']
此外,似乎您從未設置過 variable
filename
。