cer*_*oob 13 python parameters bash 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 _ __ _
#!/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[@]}" ) );
Run Code Online (Sandbox Code Playgroud)
bar.py _ __ _
#!/bin/python
import sys
for arg in sys.argv:
print arg
Run Code Online (Sandbox Code Playgroud)
因为我假设python中的所有缩进都是正确的(不确定StackOverflow如何做到这一点:)).这两个代表了我所拥有的问题的核心.如上所述,bar.py在没有从foo.sh调用时正确打印参数.
PS:我的意思是说"地壳"
编辑,因为代码已发布
您的代码正在执行正确的操作 - 除了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[@]}
Run Code Online (Sandbox Code Playgroud)
文件 pytest.py
#!/usr/bin/python
import sys
for i in sys.argv:
print "hi"
Run Code Online (Sandbox Code Playgroud)
如果你运行bash脚本,这将打印出一堆'hi'字符串.
| 归档时间: |
|
| 查看次数: |
25994 次 |
| 最近记录: |