繁体   English   中英

如何将 Bash 变量传递给 Python?

[英]How to pass a Bash variable to 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

蟒蛇脚本:

#!/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 脚本是一个子进程,因此您需要确保export您希望子进程访问的变量。

要回答您的原始问题,您需要先导出变量,然后使用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]

看看解析 Python 参数 你的 bash 代码会很好,只需要编辑你的 Python 脚本来接受参数。

在您的脚本中使用它(根据 Aarons 建议编辑):

def main(args):
    do_something(args[0])


if __name__ == "__main__":
    import sys
    main(sys.argv[1:])

脚本的命令行参数可作为sys.argv列表使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM