將 bash 變數傳遞給 python 腳本

將 bash 變數傳遞給 python 腳本

我有這個Python腳本:

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation('abcd','')

但是,我希望能夠使用“abcd”變數來呼叫此腳本,這樣我就可以插入任意字母組合,而不是像“efgh”這樣的“abcd”。

通常,我可以在 bash 腳本的最後一行使用$@or$1來代替,如下所示:abcd

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation("$1",'')

但是當我使用類似的東西運行腳本時,./scriptname.py efgh我得到:

$1
1$

而不是“efgh”的排列。

答案1

shell的位置參數數組等的python等效$1$2sys.argv

所以:

#!/usr/bin/env python

import sys

def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation(sys.argv[1],'')

然後

$ ./foo.py abcd
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba

答案2

有很多參數化 python 的方法。位置參數、環境變數和命名參數。環境變數:

導入 os 並使用 getenv ,例如:

fw_main_width  =os.getenv('FW_MAIN_WIDTH',  fw_main_width)  

其中第二個參數是未設定環境變數的預設值。

位置參數:

導入 sys 後使用 sys.argc、sys.argv[n]。

命名參數:

或對於命名參數,(你問什麼)

 import argparse  

然後描述可能的參數:

parser = argparse.ArgumentParser(description = "Project", fromfile_prefix_chars='@')
parser.add_argument("-V", "--version", help="show program version", action="store_true")
parser.add_argument("-W", "--width", help="set main screen width")  
read arguments from the command line  

args = parser.parse_args()

並將它們用作 args.width 等。

答案3

好吧,我在寫問題時想出了一個解決方法,但我覺得這對其他用戶很有用,所以就在這裡。

對於Python(Python2),我們可以使用raw_input()代替,$1但它的工作方式有點不同。 bash 中不是在腳本名稱後面輸入內容,而是提示您輸入值你運行腳本。

這是一個例子:

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation(raw_input("enter characters: "),'')

運行腳本將提示使用者「輸入字元:」。使用者輸入字元然後按 後ENTER,排列將在終端中列印。

Here is the source 它也解釋瞭如何為 python3 執行此操作。

答案4

import itertools, argparse

def main():
        parser = argparse.ArgumentParser()
        parser.add_argument('-l', '--letters', dest='letters',  type=str, help='Letters to iterate over')
        options = parser.parse_args()


        a = [''.join(i) for i in itertools.permutations(options.letters)]
        print(a)

if __name__ == '__main__': main()

在命令列上:FileName.py -l abcd

相關內容