从shell脚本

时间:2016-05-23 13:54:06

标签: python linux bash shell sh

我需要从shell脚本执行我的python程序,以便我的python程序中的print命令将被公开以便从另一个程序读取。 shell脚本:

#!/bin/bash

if [ $# -lt 1 ] || [ $# -gt 2 ];then
    echo "Usage: $0 APK <duration in seconds>"
    exit 1;
fi

printf "$(python '/root/Desktop/DroidBox_4.1.1/scripts/droidbox.py' $1 $2 -c 'import sys; exec sys.stdin.read()')"

我的python程序应该得到参数$ 1和$ 2,但是它不会将这些作为参数识别,而是将-c和命令作为参数传递给它。

对于这样的答案:在我的其他项目中获取流程输入流不会对我有用。似乎工作的唯一方法是使用-c选项和命令&#39; exec sys.stdin.read()&#39;。

谢谢。

2 个答案:

答案 0 :(得分:1)

它应该以你编写它的方式运行得很好。在一个精简版本中,我得到的是:

(bash)test.sh脚本:

#!/bin/bash    
python /tmp/test.py $1 $2

(python)test.py脚本:

import sys
print "in python"
print sys.argv

最后是shell session

smassey@hacklabs:/tmp $ ./test.sh hello world
in python
['/tmp/test.py', 'hello', 'world']

正如您所看到的,bash脚本调用python脚本,该脚本将值打印到stdout,因此它们与其他指向stdout的内容一样公开:

smassey@hacklabs:/tmp $ ./test.sh hello world | grep python | tr 'a-z' 'A-Z'
IN PYTHON

答案 1 :(得分:0)

argparse模块也非常有用。这允许您为程序添加自定义标志(从用户的角度来看也更方便)。