
Estoy tratando de escribir un argumento de línea de comando que incluirá un nombre de archivo, que luego intentará abrir el archivo y leer el contenido del archivo dentro de la línea de comando de Linux, si no se pasa ningún argumento, simplemente abrirá el archivo que está predefinido dentro del Código. Actualmente, cuando voy a ejecutar python file.py /home/Desktop/TestFile
Recibo un error: argumentos no reconocidos:
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:
Respuesta1
Debo decir que tu código me hizo rascarme un poco la cabeza.
Así es como lo haría:
#!/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)
Ahora, si ejecuto este script, obtengo este resultado cuando NO paso un argumento, usando así el fileName
( myFile
) que está en la función:
./args.py
foo
bar
baz
Revisemos dos veces el archivo myFile
.
cat myFile
foo
bar
baz
Esto es lo que sucede cuando especifico un archivo falso:
./args.py foo
Can't open file foo.
Y finalmente, cuando especifico un archivo correcto 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
El principal problema con su código es este:
FILENAME = first
La first
variable contiene la lista completa, es decir sys.argv
, no se puede abrir un archivo con un elemento de lista como argumento (open)
. Mira esto:
#!/usr/bin/env python3
import sys
first = sys.argv
FILENAME = first
with open(FILENAME) as f:
for line in f:
print(f)
Ahora cuando ejecuto me sale esto:
./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']
Además, parece que nunca configuraste la variable filename
.
Respuesta2
#!/usr/bin/env python
import sys
def openfile(fn):
file = open(fn, "r")
out = file.read()
print out
file.close()
openfile(sys.argv[1])
Inténtalo, esto funcionará, al menos para leer el archivo en la terminal.