从Stdin读取带有参数的Python

从Stdin读取带有参数的Python,第1张

从Stdin读取带有参数的Python

您的

preprocess.py
文件正在尝试读取表单
sys.argv[1]
并将其作为文件打开。

如果您传递

-h
到命令行,它将尝试使用该名称打开文件。

从处理中拆分命令行解析

您的

preprocess
函数将不在乎命令行参数,它将获取打开文件描述符作为参数。

因此,在解析命令行参数之后,您应该注意提供文件描述符,在这种情况下为

sys.stdin

样品溶液使用
docopt

argparse没有任何问题,我最喜欢的解析器是

docopt
,我将用它来说明典型的命令行解析拆分,准备最终函数调用和最终函数调用。您也可以使用argparse实现相同的目的。

首先安装docopt:

$ pip install docopt

这里谈到的

fromstdin.py
代码:

"""fromstdin - Training and Testing frameworkUsage: fromstdin.py [options] <input>Options:    --text=<textmodel>         Text model [default: text.txt]    --features=<features>      Features model [default: features.txt]    --test=<testset>Testing set [default: testset.txt]    --vectorizer=<vectorizer>  The vectorizec [default: vector.txt]Read data from <input> file. Use "-" for reading from stdin."""import sysdef main(fname, text, features, test, vectorizer):    if fname == "-":        f = sys.stdin    else:        f = open(fname)    process(f, text, features, test, vectorizer)    print "main func done"def process(f, text, features, test, vectorizer):    print "processing"    print "input parameters", text, features, test, vectorizer    print "reading input stream"    for line in f:        print line.strip("n")    print "processing done"if __name__ == "__main__":    from docopt import docopt    args = docopt(__doc__)    print args    infile = args["<input>"]    textfile = args["--text"]    featuresfile = args["--features"]    testfile = args["--test"]    vectorizer = args["--vectorizer"]    main(infile, textfile, featuresfile, testfile, vectorizer)

可以这样称呼:

$ python fromstdin.pyUsage: fromstdin.py [options] <input>

显示帮助:

$ python fromstdin.py -hfromstdin - Training and Testing frameworkUsage: fromstdin.py [options] <input>Options:    --text=<textmodel>         Text model [default: text.txt]    --features=<features>      Features model [default: features.txt]    --test=<testset>Testing set [default: testset.txt]    --vectorizer=<vectorizer>  The vectorizec [default: vector.txt]Read data from <input> file. Use "-" for reading from stdin.

使用它,从标准输入中输入:

(so)javl@zen:~/sandbox/so/cmd$ ls | python fromstdin.py -{'--features': 'features.txt', '--test': 'testset.txt', '--text': 'text.txt', '--vectorizer': 'vector.txt', '<input>': '-'}processinginput parameters text.txt features.txt testset.txt vector.txtreading input streambcmd.pycallit.pyfromstdin.pyscrmodule.pyprocessing donemain func done


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5664179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存