
ich versuche, ein Befehlszeilenargument zu schreiben, das einen Dateinamen annimmt und dann versucht, die Datei zu öffnen und den Inhalt der Datei innerhalb der Linux-Befehlszeile zu lesen. Wenn kein Argument übergeben wird, wird einfach die Datei geöffnet, die im Code vordefiniert ist. Derzeit, wenn ich python file.py /home/Desktop/TestFile ausführe
ich erhalte die Fehlermeldung: Nicht erkannte Argumente:
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:
Antwort1
Ich muss sagen, Ihr Code hat mich ein wenig zum Grübeln gebracht.
So würde ich es machen:
#!/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)
Wenn ich dieses Skript jetzt ausführe, erhalte ich dieses Ergebnis, wenn ich KEIN Argument übergebe und daher das fileName
( myFile
) in der Funktion verwende:
./args.py
foo
bar
baz
Lassen Sie uns die Datei noch einmal überprüfen myFile
.
cat myFile
foo
bar
baz
Folgendes passiert, wenn ich eine falsche Datei angebe:
./args.py foo
Can't open file foo.
Und schließlich, wenn ich eine korrekte Datei als Argument angebe:
./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
Das Hauptproblem mit Ihrem Code ist folgendes:
FILENAME = first
Die first
Variable enthält die gesamte Liste, d. h. sys.argv
Sie können keine Datei mit einem Listenelement als Argument öffnen (open)
. Sehen Sie sich das an:
#!/usr/bin/env python3
import sys
first = sys.argv
FILENAME = first
with open(FILENAME) as f:
for line in f:
print(f)
Bei der Ausführung erhalte ich jetzt Folgendes:
./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']
Außerdem scheint es, als hätten Sie die Variable nie festgelegt filename
.
Antwort2
#!/usr/bin/env python
import sys
def openfile(fn):
file = open(fn, "r")
out = file.read()
print out
file.close()
openfile(sys.argv[1])
Versuchen Sie das, das wird funktionieren, zumindest für das Auslesen der Datei auf dem Terminal