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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值