Python 从标准输入中读取参数

2023-12-01

我想从 python stdin 读取数据,但也想在我的程序中拥有输入选项。当我尝试将选项传递给我的程序时,我收到错误文件未找到并且我的参数被丢弃。

为了解析参数,我使用以下代码:

parser=argparse.ArgumentParser(description='Training and Testing Framework')

parser.add_argument('--text', dest='text',
                   help='The text model',required=True)
parser.add_argument('--features', dest='features',
                   help='The features model',required=True)
parser.add_argument('--test', dest='testingset',
                   help='The testing set.',required=True)
parser.add_argument('--vectorizer', dest='vectorizer',
                   help='The vectorizer.',required=True)
args = vars(parser.parse_args())

为了从标准输入读取,我使用以下代码:

for line in sys.stdin.readlines():
    print(preprocess(line,1))

命令行

echo "dsfdsF" |python ensemble.py -h
/usr/local/lib/python2.7/dist-packages/pandas/io/excel.py:626: UserWarning: Installed openpyxl is not supported at this time. Use >=1.6.1 and <2.0.0.
  .format(openpyxl_compat.start_ver, openpyxl_compat.stop_ver))
Traceback (most recent call last):
  File "ensemble.py", line 38, in <module>
    from preprocess import preprocess
  File "/home/nikos/experiments/mentions/datasets/preprocess.py", line 7, in <module>
    with open(sys.argv[1], 'rb') as csvfile:
IOError: [Errno 2] No such file or directory: '-h'

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

如果你通过了-h对于您的命令行,它正在尝试打开具有该名称的文件。

将命令行解析与处理分开

Your preprocess函数不应关心命令行参数,它应获取打开的文件描述符作为参数。

因此,在解析命令行参数后,您应该注意提供文件描述符,在您的情况下它将是sys.stdin.

示例解决方案使用docopt

argparse 没有任何问题,我最喜欢的解析器是docopt我将用它来说明命令行解析、准备最终函数调用和最终函数调用的典型拆分。您也可以使用 argparse 实现相同的目的。

首先安装docopt:

$ pip install docopt

来了fromstdin.py code:

"""fromstdin - Training and Testing Framework
Usage: 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 sys

def 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.py
Usage: fromstdin.py [options] <input>

显示帮助:

$ python fromstdin.py -h
fromstdin - Training and Testing Framework
Usage: 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>': '-'}
processing
input parameters text.txt features.txt testset.txt vector.txt
reading input stream
bcmd.py
callit.py
fromstdin.py
scrmodule.py
processing done
main func done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 从标准输入中读取参数 的相关文章

  • 如何打印前面有一定数量空格的整数?

    C has printf Xd Y 它只打印整数 X 并使其在控制台窗口上占据 Y 空格 例如 printf 3d 10 console 10 printf 5d 5 console 5 我如何在 python 3 中使用它 This pr
  • 有什么好的适用于 Google App Engine 应用程序的 AJAX 框架吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的 Google App Engine 应用程序中实现 AJAX 因此我正在寻找一个好的
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • Python Apache Beam 端输入断言错误

    我对 Apache Beam Cloud Dataflow 还很陌生 所以如果我的理解不正确 我深表歉意 我正在尝试通过管道读取大约 30 000 行长的数据文件 我的简单管道首先从 GCS 打开 csv 从数据中提取标题 通过 ParDo
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • Python FTP下载550错误

    我编写了一个 ftp 爬虫来下载特定文件 它会一直工作 直到找到要下载的特定文件 然后抛出此错误 ftplib error perm 550 该文件存在于我的下载文件夹中 但文件大小为 0 kb 我需要转换某些内容才能下载吗 我可以访问 f
  • Bash:替换管道标准输入中的子字符串

    我尝试用新的子字符串替换标准输入中的某个子字符串 在读取几个文件后 我必须从管道获取标准输入cat 然后我想将更改后的字符串向前推到管道中 这是我尝试做的 cat file1 file2 echo cat path to file path
  • matplotlib vlines 图中未应用 y 轴的最小值

    我正在 matplotlib 中绘制 vlines 图 数据集中的所有 y 值如下 gt 0 我希望 y 轴最底部的刻度能够读取0 但相反 我得到 500 这是代码 usr bin env python import numpy as np
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • 使用具有可变数量索引的 numpy mggrid

    如何将 numpy mgrid 与可变数量的索引一起使用 我在 github 上找不到任何人将其与硬编码值以外的任何内容一起使用的示例 import numpy as np np mgrid 1 10 1 10 this works fin
  • 在python中使用编解码器utf-8打开文件错误

    我在 windows xp 和 python 2 6 4 上执行以下代码 但它显示 IOError 如何打开名称带有 utf 8 编解码器的文件 gt gt gt open unicode txt euc kr encode utf 8 T
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 如何将Python包从旧版本安装到新版本?

    我正在使用 python 3 7 最近在 Linux 中安装了 python 3 8 是否有任何 bash 命令或脚本可以获取 3 7 的所有软件包列表并在 3 8 版本中一一安装 我想避免每个包裹都手工完成 注意 我将它们安装在我的系统中
  • 在自定义 keras 层的调用函数中传递附加参数

    我创建了一个自定义 keras 层 目的是在推理过程中手动更改前一层的激活 以下是基本层 它只是将激活值乘以一个数字 import numpy as np from keras import backend as K from keras
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前

随机推荐

  • 为什么Chrome要从style属性中读取svg圆半径?

    我使用 Chrome 开发工具进行开发 我刚刚用 IE11 进行了演示 嗯 是的 我的错误是没有使用 IE 检查 并且下面的语法不是有意的 在 d3 js 中设置属性时犯了错误 但我很受伤 因为我的图表没有显示 我想了解为什么我不能更早地发
  • 如何使用 Selenium Python 在 WordPress 帖子中上传文件?

    我试图使用自动化 WordPress 帖子内容创建Selenium Webdriver Python 不幸的是 我无法上传帖子内容中的文件 我已经搜索过解决方案 但大多数都使用send keys这不适用于 WP 插入介质 见下图 在插入媒体
  • 除了 MySQL 中的所有等效项

    所以我有一个名为members的表和另一个名为group的表 组的领导者也是成员 为了检索不是领导者的成员 我做了以下操作 代码 SELECT first name last name rank FROM members EXCEPT AL
  • 谷歌地图触摸底部工作表对话框

    我的底部工作表对话框的顶部有一个谷歌地图片段 我禁用了底部工作表行为上的可拖动触摸操作 以便我可以控制地图 问题是我无法使用向上或向下触摸操作滚动地图 因为我的底部工作表可拖动已禁用 我正在考虑当用户触摸地图时禁用底部工作表行为的触摸操作
  • 想要使用 PubNub 向用户的网络浏览器发送实时更新

    考虑使用 PubNub 向用户的 Web 浏览器发送实时更新 我查看了他们的网站和材料 看起来他们有几个不同的选择 我们希望使用它向用户正在查看的网页发送实时更新 该信息很简单 例如 您刚刚收到一条消息 我们并不是在尝试实现聊天程序或类似的
  • 使用 Jackson 或其替代方案将 JSON 树解析为普通类

    如何解析该 JSON foo bar baz Hello qux World 进入该类使用Jackson或其替代方案 public class Foo private String baz private String qux public
  • 使用旋转矩形的 4 个点在 PIL 中裁剪图像

    我有一个旋转矩形的四个点的列表 其形式为 points x1 y1 x2 y2 x3 y3 x4 y4 我可以使用以下方法在 PIL 中进行裁剪 img crop x1 y1 x2 y2 但这不适用于旋转的矩形 只是为了澄清 我希望旋转生成
  • XMLHttpRequest 模块未定义/未找到

    这是我的代码 var XMLHttpRequest require xmlhttprequest XMLHttpRequest var xhr new XMLHttpRequest xhr open GET URL xhr setReque
  • Python 删除字符串

    我有这 3 个字符串 黄色 小号 弹力 成人 T21fdsfdsfs黄色 小号 弹力 成人 Tdsfs黄色 小号 弹力 成人 TD 我想删除最后一个之后的所有内容 包括逗号 所以我想删除这些部分 T21fdsfdsfs Tdsfs and
  • 为什么静态和寄存器存储类不能一起使用?

    当按以下方式定义变量时 static register int a1 0 我们得到错误 error multiple storage classes in declaration specifiers 这个错误有什么根本原因吗 为什么变量不
  • PHP服务器端帖子

    我正在尝试让服务器端 POST 在 PHP 中工作 我正在尝试将交易数据发送到支付网关 但我不断收到以下错误 信息 fopen https secure ogone com ncol test orderstandard asp 无法打开流
  • JavaScript:可选回调? [复制]

    这个问题在这里已经有答案了 我编写了一个函数 它有 3 个参数 其中一个是回调函数 如何使回调成为可选参数 而不必编写另一个没有回调参数的函数 function myFunction arg1 arg2 callback do someth
  • 从数组中返回奇数或偶数

    只是需要帮助来确定我在这个代码战争挑战中做错了什么 我意识到这对某些人来说可能很容易 但请注意我只是 Javascript 的初学者 挑战 给你一个数组 长度至少为 3 但是 可能非常大 包含整数 该数组要么完全是 由奇数整数组成或完全由偶
  • 继承鉴别器的 .NET Linq to SQL 性能问题

    我遇到了具有大量继承类的 LINQ to SQL 模型的性能问题 我隔离了这个问题 它似乎是 LINQ to SQL 生成的代码本身的某种问题 我使用 Northwind 创建了一个示例程序来充实这个问题 在这两种情况下 它都会返回 Cus
  • 迭代向量时 typeid.name() 不会改变。动态转换和 typeid 基类指针

    答 总之用虚函数 因此 实际上不要将其用作良好的设计 但出于学习目的 请阅读 首先我想说我正在使用 c 和 Qt 我有一个形状指针向量 基类 编辑 doSomething 不是基类的成员 而是派生类的成员 这就是为什么我使用dynamic
  • 多部分/表单数据的问题

    当我的表单包含多部分 表单数据时 我无法从 servlet 中的文件和文本输入获取值 我正在使用 apache commons fileuploads 来帮助上传 有什么建议 另外 在下面的代码中 有一些我认为应该更有效的事情 有没有更好的
  • 在mysql中使用select into局部变量和准备好的语句

    每次调用此存储过程时我都会收到此错误 1064 You have an error in your SQL syntax check the manual that corresponds to your MySQL server vers
  • Jquery:元素数组的事件监听器

    我使用以下方法用元素填充数组 each 方法和 this 选择器 function var elements new Array var index 0 img each function if this attr attribute th
  • 如何检测文本中只有空格的行?

    鉴于 空行 是一个空格 我正在尝试逐行读取文本文件 我想忽略空白行 或者以更正确的方式 我想检测空行 空行可以包含空格 换行符等 并且它仍然被视为空行 如果您在记事本中打开它 在空行中您不应该看到任何内容 有没有一种快速的方法可以在Pyth
  • Python 从标准输入中读取参数

    我想从 python stdin 读取数据 但也想在我的程序中拥有输入选项 当我尝试将选项传递给我的程序时 我收到错误文件未找到并且我的参数被丢弃 为了解析参数 我使用以下代码 parser argparse ArgumentParser