如何将Bash变量传递给Python?
发布时间:2020-12-15 18:24:04 所属栏目:安全 来源:网络整理
导读:最终我理解这一点并且它有效. bash脚本: #!/bin/bash#$-V#$-cwd#$-o $HOME/sge_jobs_output/$JOB_ID.out -j y#$-S /bin/bash#$-l mem_free=4Gc=$SGE_TASK_IDcd /home/xxx/scratch/test/FILENAME=`head -$c testlist|tail -1`python testpython.py $FILENAME
最终我理解这一点并且它有效.
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] 谢谢
Bash变量实际上是环境变量.你可以通过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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |