2016-05-23 24 views
0

我需要從shell腳本執行我的python程序,以便我的python程序中的打印命令可以從另一個程序讀取。 shell腳本:從shell腳本中將參數插入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之後卻服用-C和命令作爲parametrs。

對於像這樣的答案:在我的其他項目中獲取流程輸入流對我無效。似乎工作的唯一方法是使用-c選項和命令'exec sys.stdin.read()'。

謝謝。

+0

'droidbox.py'是什麼樣的?如果你在該腳本中打印(sys.argv)',它會顯示什麼? –

+0

我不會直接在printf中使用python輸出,而是使用'printf'%s「」$(python ...' 然後,它應該讀取什麼輸入,shell腳本的stdin? 另外,as測試,您可以分配$ 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 HICH打印值stdout所以他們就像暴露什麼都指向stdout

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

的argparse模塊是非常有幫助。這使您可以將自定義標誌添加到您的程序中(從用戶的角度來看,使其更加方便)。