las variables del golpe son en realidad variables de entorno. Puede acceder a ellos a través del objeto os.environ con una interfaz tipo diccionario. Tenga en cuenta que hay dos tipos de variables en Bash: las locales del proceso actual y las heredadas por procesos secundarios. Su secuencia de comandos de Python es un proceso secundario, por lo que debe asegurarse de que export
la variable a la que desea que acceda el proceso secundario.
Para responder a su pregunta original, primero debe exportar la variable y luego acceder desde dentro del script de python usando os.environ
.
##!/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]
Alternativamente, es posible pasar la variable como un argumento de línea de comandos, que es lo que el código está haciendo ahora. En ese caso, debe buscar en sys.argv
, que es la lista de argumentos pasados a su secuencia de comandos. Aparecen en sys.argv
en el mismo orden que los especificó al invocar el script. sys.argv[0]
siempre contiene el nombre del programa que se está ejecutando. Las entradas subsiguientes contienen otros argumentos. len(sys.argv)
indica la cantidad de argumentos que recibió la secuencia de comandos.
#!/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]
¿Qué parte del módulo 'argparse' te confunde? http://docs.python.org/dev/library/argparse.html. Ayuda hacer más preguntas ** específicas ** sobre el problema que estás teniendo con tu código. Por favor, publique el código, usando 'argparse' y haga preguntas específicas. –
Pásalo como un parámetro de línea de comando y luego sácalo de sys.argv. – GreenMatt