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」の変数を使用して呼び出して、「abcd」の代わりに「efgh」などの任意の文字の組み合わせを挿入できるようにしたいと考えています。

通常、次のように bash スクリプトの最後の行での代わりに$@または を使用できます。$1abcd

#!/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

シェルの位置パラメータ配列などに相当する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)  

2 番目のパラメータは、env 変数が設定されていない場合のデフォルトです。

位置引数:

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順列がターミナルに表示されます。

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

関連情報