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

시도해 보세요. 작동할 것입니다. 최소한 터미널에서 파일을 읽을 수는 있습니다.

관련 정보