2016-05-23 6 views
0

私のpythonプログラムの印刷コマンドが別のプログラムから読み込むために公開されるように、シェルスクリプトから私のpythonプログラムを実行する必要があります。 シェルスクリプト:シェルスクリプトからPythonプログラムにパラメータを挿入

#!/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プログラムはparametrsに$ 1と$ 2を取得する必要が、それはparametrsとしてそれらを認識するがparametrsとして後-cコマンドを取っていません。

回答:私の他のプロジェクトでプロセス入力ストリームを取得することは、私のためには機能しません。唯一の方法は、-cオプションと'exec sys.stdin.read() 'コマンドを使用することです。

ありがとうございました。

+0

'droidbox.py 'とは何ですか?そのスクリプトで 'print(sys.argv)'を実行すると、何が表示されますか? –

+0

printfの中でpythonの出力を直接使用するのではなく、代わりに 'printf"%s "" $(python ... ' シェルスクリプトのstdinは何の入力を読みますか? また、 $ 1と$ 2の変数を割り当てた後、droidbox.pyの呼び出しで変数名を使用して、誰かが位置パラメータでマングリングするのを避けることができます。 –

答えて

1

あなたが書いたとおりに動作するはずです。ここでストリップダウンバージョンでは、私が得るものです:

(bashの)test.shスクリプト:

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

(パイソン)test.pyスクリプト:

import sys 
print "in python" 
print sys.argv 

し、最終的にshell session

[email protected]:/tmp $ ./test.sh hello world 
in python 
['/tmp/test.py', 'hello', 'world'] 

ご覧のとおり、bashスクリプトはpythonスクリプトw stdoutにHICHプリント値はので、彼らはstdoutに向け何か他のものとして公開と同じようにしている:

[email protected]:/tmp $ ./test.sh hello world | grep python | tr 'a-z' 'A-Z' 
IN PYTHON 
0

argparseモジュールは、同様に非常に便利です。これにより、プログラムにカスタムフラグを追加することができます(ユーザーの視点から操作する方が便利です)。

関連する問題