Python - 如何使用 stdin/stdout 在命令行上解析 argv?

2024-06-28

我是编程新手。我查看了这方面的教程,但我只是变得更加困惑。但我想做的是使用 stdin 和 stdout 接收数据,通过参数传递数据并打印输出结果。

所以基本上,在命令行上,用户将输入 和 一个参数。

论据是:

i = sys.argv [1]

f = sys.argv [2]

w = sys.argv [3]

然后使用 if/else 程序将根据上面选择的参数执行一些操作。

即:在命令行上,用户将输入脚本名称并f (for sys.argv[2:2])

$ test.py f

.

if sys.argv == i:
     #execute some stuff

elif sys.argv == f:
      #execute some stuff

else: 
     sys.argv == w
     #execute some stuff

使用 stdin/stdout 我如何创建这个开关,程序根据该开关执行一段代码argv被选中?任何意见将不胜感激。


看起来你有点困惑sys.argv。它是您在启动程序时为其提供的参数列表。所以如果你执行python program.py f这将是["program.py", "f"]。如果你执行它作为python program.py f w i这将是["program.py", "f", "w", "i"]。所以你展示的代码:

i = sys.argv[1]
f = sys.argv[2]
w = sys.argv[3]

如果调用少于 3 个参数的程序,将会抛出异常。

有一些库可以帮助您解析参数,例如argparse https://docs.python.org/3/library/argparse.html or click http://click.pocoo.org/5/。但对于简单的情况,仅使用 sys.argv 可能更容易。

看起来您希望程序以三种模式运行:i、f 和 w。

if len(sys.argv) > 2:
    print("Please only call me with one parameter")
    sys.exit()

if sys.argv[1] == "f":
    #do some stuff
elif sys.argv[1] == "i":
    #do some other stuff
elif sys.argv[1] == "w":
    #do some more other stuff
else:
    print("Only accepted arguments are f, i and w")
    sys.exit()

您可以通过写入标准输出print or sys.stdout.write()其中第一个将为您输入的每个字符串添加换行符。

如果您希望用户交互式输入某些内容,您应该使用input() (raw_input()在Python2中。那里input()将语句评估为你几乎总是不想要的Python代码)。

如果你想用大量数据做某事,最好将路径传递给程序,然后读入文件。你还可以通过以下方式使用 stdinsys.stdin.read()但你想通过管道传递一些东西some-other-program | python program.py f或读取文件python program.py f < file.txt。 (理论上,您也可以使用 stdin 来读取交互式数据,但不要这样做,而是使用输入。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python - 如何使用 stdin/stdout 在命令行上解析 argv? 的相关文章

  • Django - form_valid() 与 save()

    在 django 表单中 为了保存我通常使用的其他数据form valid 但因为我也可以使用save 表单类的方法 今天我重写了save 代替form valid 我的多对多领域出现了问题 使用时 manytomanyfield 的值不会
  • 将列表转换为字符串并返回

    我有一个虚拟机 它从嵌套在列表中的元组读取指令 如下所示 0 4738 0 36 0 6376 0 0 存储这种机器代码程序时 文本文件是最简单的 必须写成字符串 这显然很难转换回来 是否有任何模块可以将字符串读入列表 以可读的方式存储列表
  • python sqlite ValueError:无法解析日期时间字符串

    我有一个 txt 文件 用于填充 sqlite 表 FoodConsumed tb class FoodConsumed Tb db Model tablename foodconsumed tb id db Column db Integ
  • 为什么 Sequence 是 mypy 中 + 不支持的操作数类型?

    mypy给出一个错误Sequence str 不是受支持的操作数类型 操作员 test py from typing import Sequence def test x Sequence str y Sequence str gt Seq
  • Python,针对频繁模式的网络日志数据挖掘

    我需要开发一个用于网络日志数据挖掘的工具 由于在特定用户会话中请求了许多 url 序列 从 Web 应用程序日志中检索 我需要找出网站用户的使用模式和组 集群 我是数据挖掘的新手 现在经常检查谷歌 发现一些有用的信息 即查询似乎指向几乎完全
  • Python 中的双 SSH 隧道

    今天 我在命令行中使用 ssh 将端口从远程服务器转发 使用中间服务器到我的本地计算机 这是我在 shell 中使用的命令 ssh user remote server L 2443 localhost 433 此 ssh 会话使用 ssh
  • 有效地将字符串(或元组)转换为 ctypes 数组

    我有一段代码 它采用 PIL 图像并将其转换为 ctypes 数组以传递给 C 函数 w px h px img size pixels struct unpack dI w px h px img convert RGBA tostrin
  • 使用 PyQt5/Pyside2 设置重复的 SVG 图案作为主窗口/Qwidget 背景

    我已经通过生成了 SVG css 代码http www heropatterns com http www heropatterns com 我正在尝试使用它作为我的主窗口 Qwidget 的背景 我希望背景随着窗口变大或缩小而调整大小 我
  • 在pyspark中将RDD转换为Dataframe

    我正在尝试将 RDD 转换为 pyspark 中的 Dataframe My RDD abc 1 2 0 def 4 6 7 1 我想要 Dataframe 形式的 RDD Index Name Number 0 abc 1 2 1 def
  • 为什么 scipy.signal.correlate2d 在此示例中无法工作?

    我试图对两个图像进行交叉关联 从而通过找到最大相关值来将模板图像定位在第一张图像上 我画了一个带有一些随机形状的图像 第一张图像 并剪出了其中一个形状 模板 现在 当我使用 scipy 的 correlate2d 并在具有最大值的相关性中定
  • Scikit-learn 中的 GridSearchCV 输出问题

    我想执行超参数搜索以在 sklearn 中选择预处理步骤和模型 如下所示 pipeline Pipeline combiner PolynomialFeatures dimred PCA classifier RandomForestCla
  • 使用 pip freeze 安装 numpy

    I need to install Numpy version 1 17 1 but every time it just freezes I have now tried multiple times and I have been wa
  • 贝塞尔曲线python的递归函数

    我被要求设计一个名为 Bezier 的递归函数 其参数是给定点的列表 以及必须评估的点 它返回贝塞尔曲线中由点列表的控制点定义的点 这是我所做的算法 def Bezier point list t if len point list 1 r
  • 如何在IDLE中同时运行两个模块

    我正在开发一个超级简单的套接字程序 我有客户端代码和服务器代码 如何同时运行这两个 py 文件以查看它们是否有效 您可以同时运行 IDLE Python shell 的多个实例 因此 打开 IDLE 并运行服务器代码 然后再次打开 IDLE
  • 启动robotframework-RIDE(机器人框架IDE)时出错

    我已经安装了Robot Framework并安装了wxPython 然后安装了Ride 当我通过执行启动它时python ride py 它会遇到如下错误 我相信这与wxPython版本有关 不确定 有一系列UnreprError像这样
  • 无法在 BeautifulSoup 中获得正确的链接

    我正在尝试解析一些 HTML 并且想提取与特定模式匹配的链接 我正在使用find使用正则表达式的方法 但它没有给我正确的链接 这是我的片段 有人可以告诉我我做错了什么吗 from BeautifulSoup import Beautiful
  • py.test 日志控制

    我们最近切换到 py test 进行 python 测试 顺便说一句 这非常棒 但是 我试图弄清楚如何控制日志输出 即内置的 python 日志记录模块 我们安装了 pytest capturelog 并且它按预期工作 当我们想查看日志时
  • 多处理冻结计算机

    我通过使用多处理提高了执行时间 但我不确定 PC 的行为是否正确 它会冻结系统 直到所有进程完成 我使用的是 Windows 7 和 Python 2 7 也许我做错了 这就是我所做的 def do big calculation sub
  • 在Python中使用argparse解析整个JSON

    我正在尝试使用 ARGPARSE 库在一个简单的参数中解析整个 Json 问题是当它遇到儿子内部的不同元素 例如 和 时 它会突然停止 这是测试代码 parse py import argparse parser argparse Argu
  • 从 pexpect 中提取 stderr

    我的问题很简单 我可以吗 expect 使用 pexpect 查看 stderr 上的某些输出 它似乎pexpect spawn 只能用于期望 stdout 上的输出 乌托邦的例子 import pexpect child pexpect

随机推荐