variabili Bash sono in realtà le variabili d'ambiente. Si ottiene attraverso l'oggetto os.environ con un'interfaccia simile a un dizionario. Nota che esistono due tipi di variabili in Bash: quelli locali per il processo corrente e quelli che sono ereditati dai processi figli. Lo script Python è un processo secondario, quindi è necessario accertarsi di avere export
la variabile a cui si desidera che il processo figlio acceda.
Per rispondere alla domanda originale, è necessario prima esportare la variabile e quindi accedervi dallo script python utilizzando 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]
In alternativa, è possibile passare la variabile come argomento della riga di comando, che è ciò che il codice sta facendo ora. In tal caso, devi cercare in sys.argv
, che è l'elenco degli argomenti passati al tuo script. Vengono visualizzati nello sys.argv
nello stesso ordine in cui sono stati specificati durante il richiamo dello script. sys.argv[0]
contiene sempre il nome del programma in esecuzione. Le voci successive contengono altri argomenti. len(sys.argv)
indica il numero di argomenti ricevuti dallo script.
#!/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]
Quale parte del modulo 'argparse' ti confonde? http://docs.python.org/dev/library/argparse.html. Ti aiuta a chiedere più ** domande ** specifiche sul problema che stai riscontrando con il tuo codice. Per favore pubblica il codice, usando 'argparse' e fai domande specifiche. –
Passalo come parametro della riga di comando e poi estrailo da sys.argv. – GreenMatt