猛砸变量实际上是环境变量。您可以通过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