如何将Bash变量传递给Python?

如何将Bash变量传递给Python?,python,bash,variables,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脚

最终,我明白了这一点,它起了作用

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

命令行参数可在
sys.argv
列表中找到。

请查看。您的bash代码会很好,只需要编辑Python脚本来接受参数

在脚本中使用此选项(根据Aarons建议编辑):


导出的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]
#/bin/python
导入系统
导入操作系统
如果len(系统argv)<2:
打印“用法:”+sys.argv[0]+''
系统出口(1)
打印“这是python脚本的名称:”+sys.argv[0]
打印“这是第一个参数:”+sys.argv[1]
f=open('/home/xxx/scratch/test/'+sys.argv[1],'r').readlines()
打印f[1]

argparse模块的哪个部分让您感到困惑。它有助于针对代码中存在的问题提出更具体的问题。请使用
argparse
发布代码并提出具体问题。将其作为命令行参数传递,然后将其从sys.argv中拉出。
bool(sys.argv)
始终为
True
sys.argv[0]
将包含脚本名称。如果要将参数传递给函数,更常见的做法是截断脚本名,这样函数就不需要知道如何忽略它。i、 e.
main(sys.argv[1:])
任何你想要的东西,我只是向你展示如何抓住像你的问题那样的论点如果你问了一个问题,然后得到一个回答这个问题的答案,那么线程就完成了。你不应该走,好吧,现在我有一个不同的错误,帮我解决。这不是stackoverflow的初衷,如果我将列表作为参数传递,它会处理吗@Mattoddsorry仍然感到困惑…有人可以将sys.argv添加到python代码中吗?您需要添加
import sys
,并更改python脚本以使用类似
args[1]的内容来接受参数。必须编辑第一行以使其准确。未报告的shell变量当然不是环境变量。
#!/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]