zmienne Bash są rzeczywiście zmienne środowiskowe. Dostajesz się do nich przez obiekt os.environ z interfejsem podobnym do słownika. Zauważ, że w Bash istnieją dwa typy zmiennych: lokalne dla bieżącego procesu oraz te, które są dziedziczone przez procesy potomne. Twój skrypt w języku Python jest procesem podrzędnym, więc musisz upewnić się, że jesteś export
zmienną, do której proces potomny ma mieć dostęp.
Aby odpowiedzieć na pierwotne pytanie, należy najpierw wyeksportować zmienną, a następnie uzyskać do niej dostęp ze skryptu Pythona za pomocą 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]
Alternatywnie możesz przekazać zmienną jako argument wiersza poleceń, co właśnie robi Twój kod. W takim przypadku musisz sprawdzić w sys.argv
, która jest listą argumentów przekazanych do twojego skryptu. Pojawiają się one w sys.argv
w tej samej kolejności, w jakiej zostały określone podczas wywoływania skryptu. sys.argv[0]
zawsze zawiera nazwę uruchomionego programu. Kolejne wpisy zawierają inne argumenty. len(sys.argv)
wskazuje liczbę argumentów, które skrypt otrzymał.
#!/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]
Która część modułu 'argparse' wprawia Cię w zakłopotanie? http://docs.python.org/dev/library/argparse.html. Pomaga zadać więcej ** konkretnych ** pytań na temat problemu z kodem. Proszę napisać kod, używając 'argparse' i zadać konkretne pytania. –
Przekaż go jako parametr wiersza polecenia, a następnie wyciągnij go z pliku sys.argv. – GreenMatt