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

試してみてください。少なくともファイルを端末に読み出すには機能します。

関連情報