【问题标题】:How to pass variable arguments from bash script to python script如何将变量参数从 bash 脚本传递到 python 脚本
【发布时间】:2011-04-26 17:10:20
【问题描述】:

我一直在尝试解决这个问题一段时间,但没有成功。情况的核心是我正在使用 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:我的意思是说“地壳”

【问题讨论】:

  • 请贴出实际的 bash 脚本,这样更容易看出哪里出错了
  • 那你做错了什么。发布出现问题的最少代码。
  • 从 bash 脚本调用时,python 脚本可以打印任何内容吗?例如。如果您在foo.py 的顶部添加print "wtf",您在运行bash 脚本时是否看到该输出?
  • 另外:我认为你的意思是这种情况的“症结”哈哈
  • @tobyodavies 和 Ignacio,我发布了内容

标签: python bash parameters arguments


【解决方案1】:

编辑,因为代码已发布

您的代码正在做正确的事情 - 除了您的 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' 字符串。

【讨论】:

  • @birryee,是的,脚本有 +x 权限...不确定第一个问题在问什么...
【解决方案2】:

编辑:

我想通了,我有一些奇怪的字符组合,该行没有正确转义。我把它从

var=( $( 一些命令) )

var=( some commands ) // 使用反引号(还在学习 SO 编辑器...)

Bash 逃逸是一种乐趣,哈哈!对于那些回答的人,感谢您的所有帮助

【讨论】:

    【解决方案3】:

    我的设置几乎与您描述的完全相同,这就是我的 bash 脚本的外观:

    VAR1=...
    VAR2=...
    VAR3=...
    
    python my_script.py $VAR1 $VAR2 $VAR3 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 2013-03-26
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多