将命令行参数传递给 Python

将命令行参数传递给 Python

我正在尝试编写一个命令行参数,它将接受一个文件名,然后尝试在 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])

尝试一下,这会起作用,至少可以将文件读取到终端

相关内容