繁体   English   中英

如何实现命令行切换到我的脚本?

[英]How to implement command line switches to my script?

我是python的新手。 我正在编写一个计算单词,行和字符的程序。 尝试使用命令行开关时,我开始遇到问题:-w,-l,-c,直到一切正常为止。

我阅读了关于argparse的stackoverflow和python文档的文章,但我现在不了解如何实现argparse库以及与其一起使用的代码。

当我运行python wc.py file.txt --l

我懂了

太多值无法显示

有人可以帮我吗?

from sys import argv
import os.path
import argparse

script, filename = argv


def word_count(filename):
    my_file = open(filename)
    counter = 0
    for x in my_file.read().split():
        counter += 1
    return counter
    my_file.close()

def line_count(filename):
    my_file = open(filename, 'r').read()
    return len(my_file.splitlines())
    my_file.close()

def character_count(filename):
    my_file = open(filename, 'r').read()
    return len(my_file)
    my_file.close()

parser = argparse.ArgumentParser()
parser.add_argument('--w', nargs='+', help='word help')
parser.add_argument('--l', nargs='+', help='line help')
parser.add_argument('--c', nargs='+', help='character help')
args = parser.parse_args()


if os.path.exists(filename):
    print word_count(filename), line_count(filename), character_count(filename)
else:
   print "There is no such file"

如果您使用argparse进行参数解析,则您不应该自己尝试解析argv

script, filename = argv

如果argv少于两个元素,则此操作将失败:

Traceback (most recent call last):
  File "wc.py", line 5, in <module>
    script, filename = argv
ValueError: need more than 1 value to unpack

或者 ,如果有两个以上的要素:

Traceback (most recent call last):
  File "wc.py", line 5, in <module>
    script, filename = argv
ValueError: too many values to unpack

相反,您想使用argparse从参数列表中提取文件名:

parser.add_argument('filename')

您现有的命令行参数也可以使用一些修正。 代替这个:

parser.add_argument('--w', nargs='+', help='word help')

你要:

parser.add_argument('-w', action='store_true', help='word help')

这为您提供了一个布尔选项,以便如果用户通过-wargs.w将为True ,否则为None 这给您:

解析器= argparse.ArgumentParser()

parser.add_argument('-w', action='store_true')
parser.add_argument('-c', action='store_true')
parser.add_argument('-l', action='store_true')
parser.add_argument('filename')
args = parser.parse_args()


if os.path.exists(args.filename):
    print word_count(args.filename), line_count(args.filename), character_count(args.filename)
else:
   print "There is no such file"

您可能还想给您的期权等长的期权:

parser.add_argument('--words', '-w', action='store_true')
parser.add_argument('--characters', '-c', action='store_true')
parser.add_argument('--lines', '-l', action='store_true')

进行此更改后,用户可以使用-w--words 然后,您将拥有args.wordsargs.charactersargs.lines (而不是args.wargs.cargs.l )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM