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

2024-05-03 14:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在努力解决这个问题,但现在运气不好。最糟糕的情况是,我正在使用bash脚本向python脚本发送参数:

示例:

foo.sh调用bar.py….调用看起来像:bar.py$var1$var2。。。$瓦恩

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

另外,我用“#”开始foo.sh!/bin/bash-x”选项并观察输出。

总结一下:

  • 两个脚本,foo.sh和bar.py
  • sh调用bar.py,将foo.sh的变量作为参数传递给bar.py
  • bar.py使用sys.argv打印它看到的参数
  • 从自己的终端运行时bar.py有效,从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[@]}" ) );

条形图

#!/bin/python
import sys  

for arg in sys.argv:  
    print arg  

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

附言:我的意思是说“硬壳”


Tags: py脚本bash参数binfooshsys
3条回答

编辑:

我想起来了,我有一些奇怪的字符组合,这一行没有被正确地转义。我把它从

var=( $( some commands) )

var=( some commands ) // using backticks (still learning the SO editor...)

猛击逃跑是一种骑术,哈哈!感谢那些回答的人,谢谢你的帮助

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

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

python my_script.py $VAR1 $VAR2 $VAR3 

编辑,因为代码已发布

您的代码正在执行正确的操作-除了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”字符串。

相关问题 更多 >