猛砸變量實際上是環境變量。您可以通過os.environ對象使用類似字典的界面來獲取它們。請注意,Bash中有兩種類型的變量:當前進程的局部變量以及子進程繼承的變量。你的Python腳本是一個子進程,所以你需要確保你想讓子進程訪問的變量。
要回答您的原始問題,您需要先導出變量,然後使用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