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

おすすめ記事