如何将变量参数从bash脚本传递给python脚本

时间:2010-10-17 22:30:54

标签: python bash parameters arguments

我一直试图解决这个问题,现在没有运气。这种情况的结果是我正在使用bash脚本将参数发送到python脚本:

示例:

foo.sh调用bar.py ....调用如下:bar.py $ var1 $ var2 ... $ varn

然后python脚本使用sys.argv数组打印所有参数。 python脚本在命令行中正常工作,但是当使用bash脚本(即foo.sh)调用时,我没有从bar.py获得输出。

此外,我使用“#!/ bin / bash -x”选项启动了foo.sh并观看了输出。

总结:

  • 两个脚本,foo.sh和bar.py
  • foo.sh调用bar.py,将foo.sh的变量作为参数传递给bar.py
  • bar.py使用sys.argv
  • 打印它看到的参数
  • bar.py在从自己的终端运行时起作用,从foo.sh
  • 调用时不起作用

任何帮助都会很棒!!!!

谢谢!

编辑:大家好,感谢回复,完整的代码很长......但......两个脚本的内容可以相加

foo.sh _ __ _

#!/bin/bash
declare -a list1;  
declare -a list2;  

list1=("foo" "bar" "please");  
list2=("foo" "bar" "please" "help");  

declare -a joined;  

joined=( $(bar.py "${list1[@]}" "${list2[@]}" ) );

bar.py _ __ _

#!/bin/python
import sys  

for arg in sys.argv:  
    print arg  

因为我假设python中的所有缩进都是正确的(不确定StackOverflow如何做到这一点:))。这两个代表了我所拥有的问题的核心。如上所述,bar.py在没有从foo.sh调用时正确打印参数。

PS:我的意思是说“地壳”

3 个答案:

答案 0 :(得分:6)

编辑,因为代码已发布

您的代码正在执行正确的操作 - 除了bar.py脚本的输出被捕获到数组joined中。由于您似乎没有打印出joined的内容,因此您永远不会看到任何输出。

以下是演示:

档案pybash.sh

#!/bin/bash

declare -a list1
declare -a list2

list1=("Hello" "there" "honey")
list2=("More" "strings" "here")

declare -a joined

joined=($(./pytest.py ${list1[@]} ${list2[@]}))
echo ${joined[@]}

档案pytest.py

#!/usr/bin/python

import sys

for i in sys.argv:
    print "hi"

如果你运行bash脚本,这将打印出一堆'hi'字符串。

答案 1 :(得分:1)

编辑:

我想通了,我有一些经过精心设计的角色组合,这条线没有被正确转义。我从

改变了它
  

var =($(某些命令))

  

var =(某些命令)//使用反引号(仍在学习SO编辑器......)

Bash逃跑是一些骑哈哈!对于那些回答的人,感谢您的帮助

答案 2 :(得分:-2)

我有几乎所描述的确切设置,这就是我的bash脚本的外观:

VAR1=...
VAR2=...
VAR3=...

python my_script.py $VAR1 $VAR2 $VAR3