
파일 이름을 입력받는 명령줄 인수를 작성하려고 합니다. 그런 다음 파일을 열고 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])
시도해 보세요. 적어도 터미널에서 파일을 읽는 데는 작동합니다.