微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将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]

谢谢

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]

原文地址:https://www.jb51.cc/bash/385065.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐