將命令列參數傳遞給 Python

將命令列參數傳遞給 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: 

答案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])

嘗試一下,這會起作用,至少可以將檔案讀取到終端

相關內容