Как передать переменную Bash в Python?
в конце концов, я понимаю это, и это работает.
скрипт bash:
#!/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/
FILENAME=`head -$c testlist|tail -1`
python testpython.py $FILENAME
скрипт python:
#!/bin/python
import sys,os
path='/home/xxx/scratch/test/'
name1=sys.argv[1]
job_id=os.path.join(path+name1)
f=open(job_id,'r').readlines()
print f[1]
thx
4 ответов
переменные Bash на самом деле являются переменными среды. Вы получаете их через ОС.объект environ со словарным интерфейсом. Обратите внимание, что в Bash есть два типа переменных: локальные для текущего процесса и унаследованные дочерними процессами. Ваш скрипт Python является дочерним процессом, поэтому вам нужно убедиться, что вы export
переменная, к которой должен получить доступ дочерний процесс.
для того чтобы ответить ваш первоначальный вопрос, вам нужно сперва экспортировать переменная, а затем доступ к ней из скрипта python с помощью 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]
кроме того, вы можете передать переменную в качестве аргумента командной строки, что и делает ваш код сейчас. В таком случае вы должны заглянуть в 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]
посмотри разбор аргументов Python. Ваш код bash будет в порядке, просто нужно отредактировать скрипт Python, чтобы принять аргумент.
используйте это в своем скрипте (отредактировано по предложению Aarons):
def main(args):
do_something(args[0])
if __name__ == "__main__":
import sys
main(sys.argv[1:])