私は this python script を持っています:
#!/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スクリプトの最終行では、abcd
の代わりに$@
または$1
を使用できます。
#!/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」の順列の代わりに。
pythonシェルの位置パラメータ配列$1
と同等、$2
などはsys.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
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などとして使用します。
さて、私は質問を書いている間に回避策を見つけましたが、これは他のユーザーに役立つだろうと感じたので、ここにあります。
python(python2)の場合、_$1
_の代わりにraw_input()
を使用できますが、動作が少し異なります。bashでスクリプト名の後に入力を入力する代わりに、値の入力を求められますafterスクリプトを実行します。
次に例を示します。
_#!/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、順列はターミナルに出力されます。
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