
estou tentando escrever um argumento de linha de comando que receberá um nome de arquivo, que tentará abrir o arquivo e ler o conteúdo do arquivo na linha de comando do Linux, se não houver nenhum argumento passado, ele apenas abrirá o arquivo que está pré-definido no Código. atualmente, quando vou executar python file.py /home/Desktop/TestFile
estou recebendo o erro: argumentos não reconhecidos:
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:
Responder1
Devo dizer que seu código me fez coçar um pouco a cabeça.
Aqui está como eu faria isso:
#!/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)
Agora, se eu executar esse script, obtenho esse resultado quando NÃO passo um argumento, utilizando assim o fileName
( myFile
) que está na função:
./args.py
foo
bar
baz
Vamos verificar o arquivo myFile
.
cat myFile
foo
bar
baz
Aqui está o que acontece quando eu especifico um arquivo falso:
./args.py foo
Can't open file foo.
E finalmente, quando especifico um arquivo correto como argumento:
./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
O principal problema com seu código é este:
FILENAME = first
A first
variável contém a lista inteira, ou seja sys.argv
, você não pode abrir um arquivo com um elemento de lista como argumento para (open)
. Veja isso:
#!/usr/bin/env python3
import sys
first = sys.argv
FILENAME = first
with open(FILENAME) as f:
for line in f:
print(f)
Agora, quando executo, recebo isto:
./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']
Além disso, parece que você nunca definiu a variável filename
.
Responder2
#!/usr/bin/env python
import sys
def openfile(fn):
file = open(fn, "r")
out = file.read()
print out
file.close()
openfile(sys.argv[1])
Tente isso, vai funcionar, pelo menos para ler o arquivo no terminal