python - 如何将 Bash 变量传递给 Python?

标签 python bash variables

最终我理解了这一点并且它起作用了。

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]

关于python - 如何将 Bash 变量传递给 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7521061/

相关文章:

variables - 如何在 PowerShell 中测试变量是否超过八个字符?

java - 变量未初始化

python - 如何从可能损坏或太大的 Python Shelve 数据库中恢复数据?

python - N 列表的总和元素明智的 python

bash - 如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?

bash - 将多个 stdout 命令重定向到一个文件

javascript - 如何在 javascript 代码中传递带有 url 的变量?

python - 在 C++ 中嵌入 python/numpy

python - 为什么导入错误: cannot import name 'AutoReg' from 'statsmodels.tsa.ar_model' occuring?

linux - 将所有输出重定向到 Bash 中的文件