バッシュ変数は、実際の環境変数です。ディクショナリのようなインタフェースを持つos.environオブジェクトを使用してそれらを取得します。 Bashには、現在のプロセスにローカルな変数と、子プロセスによって継承される変数の2種類があります。 Pythonスクリプトは子プロセスなので、子プロセスがアクセスする変数はexport
であることを確認する必要があります。
元の質問に答えるには、変数をエクスポートしてから、os.environ
を使用してpythonスクリプト内から変数にアクセスする必要があります。
##!/bin/bash
#$ -V
#$ -cwd
#$ -o $HOME/sge_jobs_output/$JOB_ID.out -j y
#$ -S /bin/bash
#$ -l mem_free=4G
c=$SGE_TASK_ID
cd /home/xxx/scratch/test/
export FILENAME=`head -$c testlist|tail -1`
chmod +X testpython.py
./testpython.py
#!/bin/python
import sys
import os
for arg in sys.argv:
print arg
f=open('/home/xxx/scratch/test/' + os.environ['FILENAME'],'r').readlines()
print f[1]
また、変数をコマンドライン引数として渡すこともできます。これは、コードが現在行っていることです。その場合は、スクリプトに渡される引数のリストであるsys.argv
を参照する必要があります。それらは、スクリプトを呼び出すときに指定したのと同じ順序でsys.argv
に表示されます。 sys.argv[0]
には常に実行中のプログラムの名前が含まれています。後続のエントリには他の引数があります。 len(sys.argv)
は、スクリプトが受け取った引数の数を示します。
#!/bin/python
import sys
import os
if len(sys.argv) < 2:
print 'Usage: ' + sys.argv[0] + ' <filename>'
sys.exit(1)
print 'This is the name of the python script: ' + sys.argv[0]
print 'This is the 1st argument: ' + sys.argv[1]
f=open('/home/xxx/scratch/test/' + sys.argv[1],'r').readlines()
print f[1]
'argparse'モジュールのどの部分があなたを混乱させますか? http://docs.python.org/dev/library/argparse.htmlあなたのコードで発生している問題について、より具体的な**質問をするのに役立ちます。 'argparse'を使ってコードを投稿し、具体的な質問をしてください。 –
コマンドラインパラメータとして渡し、sys.argvから引き出します。 – GreenMatt