
Я пытаюсь написать аргумент командной строки, который будет принимать имя файла, затем попытается открыть файл и прочитать его содержимое в командной строке 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])
Попробуйте, это сработает, по крайней мере для чтения файла в терминале.