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

시도해 보세요. 적어도 터미널에서 파일을 읽는 데는 작동합니다.

관련 정보