Übergeben von Befehlszeilenargumenten an Python

Übergeben von Befehlszeilenargumenten an Python

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 firstVariable enthält die gesamte Liste, d. h. sys.argvSie 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

verwandte Informationen