2010-10-17 71 views
12

我一直在努力解決這個問題,現在沒有運氣。形勢的地殼是,我使用的是bash腳本來參數發送到AA python腳本:如何將可變參數從bash腳本傳遞到python腳本

例子:

foo.sh調用bar.py ....通話的樣子:酒吧。 py $ var1 $ var2 ... $ varn

python腳本然後使用sys.argv數組打印所有參數。 python腳本可以從命令行正常工作,但是使用bash腳本(即foo.sh)調用時,bar.py沒有輸出。

此外,我用「#!/ bin/bash -x」選項啓動foo.sh,並觀察輸出。

總結:

  • 兩個腳本,foo.sh和bar.py
  • foo.sh調用bar.py,傳遞foo.sh的變量作爲自變量,以bar.py
  • 酒吧打印的.py它認爲使用sys.argv中從自己的終端上運行時
  • bar.py工作參數,從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[@]}")); 

bar.py _ __ _

#!/bin/python 
import sys 

for arg in sys.argv: 
    print arg 

正如我假設Python中的所有縮進都是正確的(不知道StackOverflow如何做到這一點:))。這兩個代表了我遇到的問題的核心。如上所述,當bar.py不從foo.sh調用時,它會正確輸出參數。

PS:我的意思是說「殼」

+1

請發佈實際的bash腳本,它會使它更容易看到whatts錯誤 – tobyodavies 2010-10-17 22:34:00

+2

然後,你做的事情非常錯誤。發佈展示問題的最小代碼。 – 2010-10-17 22:34:33

+0

從bash腳本調用python腳本可以打印任何東西嗎?例如。如果你在'foo.py'的頂部添加'print「wtf」',你會在運行bash腳本時看到輸出嗎? – intuited 2010-10-17 22:36:16

回答

6

編輯,因爲代碼已發佈

您的代碼正在做正確的事情 - 除了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' 字符串。

+0

@birryee,是的腳本有+ x的權限...不知道第一個問題是什麼問... – certifiedNoob 2010-10-18 04:26:51

-2

我有非常多,您所描述的具體設置,這是我的bash腳本的樣子:

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

python my_script.py $VAR1 $VAR2 $VAR3 
1

編輯:

我想通了,我有個字符的一些weired組合,該行並沒有正確地轉義。我改變了它從

VAR =($(一些命令))

VAR =(一些命令)//使用反引號(還在學習SO編輯.. )

bash逃脫是一些騎大聲笑!對於那些回答,感謝您的所有幫助