python接受linux参数吗,关于linux:从bash脚本传递参数到python

我一直在研究bash和python脚本的混合脚本。bash脚本可以接收未知的count输入参数。例如:

tinify.sh  test1.jpg test2.jpg test3.jpg .....

在bash接收到所有的参数之后,它将这些参数传递给tinify.py。现在我有两种方法可以做到这一点。

在bash中循环并调用python tinify.py testx.jpg。

换言之,python tinify test1.jpg,然后python tinify test2.jpg,最后是python tinify test3.jpg。

将所有参数传递给tinify.py,然后在python中循环。

但有一个问题,我想过滤同一个参数,比如用户输入tinify.sh test1.jpg test1.jpg test1.jpg,我只需要tinify.sh test1.jpg,所以我觉得第二种方法比较容易,因为python可能比较方便。

如何将所有参数传递给python脚本?事先谢谢!

当然,在python中立即循环。不需要为每个参数调用相同的python脚本

那么,如何将所有参数传递给python脚本呢?@罗曼佩雷克勒斯

通过分隔符分隔的字符串或JSON字符串

在bash:pythonscript.sh$@中将参数传递给python,然后将"import sys print sys.argv[0]"用于python中的第一个参数,依此类推。您可以在python中循环。

@阿迪特,你能举例说明吗?

@Ardit,需要是"$@",而不是裸露的$@,或者您正在拆分空格,扩展名称中的文字全局,或者不按接收到的方式传递输入。

除了上述切普纳的回答之外:

#!/bin/bash

tinify.py"$@"

在python脚本中,tinify.py:

from sys import argv

inputArgs = sys.argv[1:]

def remove_duplicates(l):

return list(set(l))

arguments=remove_duplicates(inputArgs)

列表arguments将包含传递给python脚本的参数(由于set不能包含python中的重复值而删除了重复的参数)。

remove_duplicates(sys.argv[1:])

在tinify.sh中使用$@。

#!/bin/bash

tinify.py"$@"

在python脚本中消除从shell中过滤出来的重复项要容易得多。(当然,这就提出了一个问题,您是否需要一个shell脚本。)

我同意消除重复是在Python中更好地完成的。我同意这里使用bash脚本是非常肤浅的。然而,这已经在前面的评论中指出了。操作询问如何过滤bash中的参数。不是在Python。

我认为有时使用./tinify.sh test1.jpg test2.jpg比使用python tinify.py test1.jpg test2.jpg更方便,尽管它们对我都很好。有没有其他方便的方法来调用它们?

如果向python脚本中添加#!/usr/bin/python(或任何适当的内容),并使其可执行,则只需运行./tinify.py test1.jpg test2.jpg。

python程序可以接受任意数量的命令行参数,使用sys.argv—只要记住sys.argv[0]是脚本的名称。实际论点包含在sys.argv[1:]中。

$ cat test_args.py

from sys import argv

prog_name = argv[0]

print('Program name:', prog_name)

for arg in argv[1:]:

print(arg)

$ python test_args.py a b 'c d'

Program name: test_args.py

a

b

c d

$

注意,包含空格的参数必须根据shell语法引用。

你明白我的问题吗?我不知道如何将所有参数从bash脚本传递到python。

你明白我的答案吗?您可以编写python部分,以便shell可以传递任意数量的参数,例如:python tinify.py $@,如果您不想接触这些参数。

您的文件tinify.py应该以以下开头(如果您有两个参数):

import sys

arg1, arg2 = sys.argv[1], sys.argv[2]

sys.argv[0]是脚本本身的名称。当然,您可以循环访问sys.argv。就我个人而言,我喜欢将所有的参数作为JSON对象传递,因此之后我将执行json.loads()

那么,如何传递到python脚本呢?

对于唯一参数tinify.sh test1.jpg test1.jpg test1.jpg应该变成tinify.sh test1.jpg的问题,可以使用一个集合。例如set([sys.argv[i] for i in range(your_number_of_args)])。

非常感谢@con--

没问题。以与bash脚本相同的方式将参数传递给python脚本。如果您调用tinify.py test1.jpgsys.argv[1]将是"test1.jpg"。如果您想要一个可变数量的参数,您可以在bash脚本中使用len(sys.argv)计算参数,我认为您可以使用"$@"传递所有参数。摘自这个答案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值