如何从Shell脚本获取循环变量以在python脚本

时间:2015-11-17 00:28:18

标签: python linux shell dictionary

抱歉,我是python的新手,我只有Shell脚本/ sh的基础知识。我有两个问题。 1)如何从bash获取循环的变量以在python脚本中检索? 2)如何将多个文件中的最大键值保存到同一个字典中?

以上问题是相关的。 说明: 主脚本在Shell脚本中,它们将循环一些Shell命令,然后为许多 K 运行Python脚本。

例如:

#!/bin/sh

for a in K*
do
 echo $a
   # Loop to call the file.
   for i in 1 2 3 4 5
   do
      # Cut the row and column
      grep -v '^#' $a/result*.txt | tr -s ' ' | cut -d ' ' -f 6 | cat > pos.txt
   done
chmod a+wx pie1.py
./pie1.py $a/pos.txt $a/neg.txt

chmod a+wx max.py
./max.py $a/output1.py

所以在max.py中我创建了一个字典,它将保存密钥和最大值。

#!/usr/bin/env python

#import pickle
from output1 import *
import subprocess

dicoMax = {}
# The Flist read from output1 that save all the Fscore for one File
dicoMax['K*']=max(Flist)
print(dicoMax)

我想从Shell脚本中检索 K *或变量作为max.py(python脚本)中字典的键,最后保存K *中的所有键值和最大值一本字典。

Tq的。

2 个答案:

答案 0 :(得分:0)

有两种方法 - 您可以将其作为命令行参数传递(这是最好的方法),或者您可以将其插入到环境变量中(这不太清楚)

阅读此dive into python tutorial将是一个良好的开端。

答案 1 :(得分:0)

对于问题1和2:

#!/bin/sh

chmod a+wx pie1.py
for a in K*
do
 echo $a
   # Loop to call the file.
   for i in 1 2 3 4 5
   do
      # Cut the row and column
      grep -v '^#' $a/result*.txt | tr -s ' ' | cut -d ' ' -f 6 | cat > pos.txt
   done

./pie1.py $a/pos.txt $a/neg.txt
### passing the arguments or value through "$a"
./max.py "$a" $a/output1.py
done

所以在python中

#!/usr/bin/env python

from output1 import *
from maxList import *
import sys  

dicoMax = {}
var = sys.argv[1] ###important
print var  
### Flist is the list of the Fscore that save in the output1 
### var is the key passing by Shell script
dicoMax[var]=max(Flist)
print(dicoMax)
### mList is the dictionary that save in the maxList file (mList must   
### be declared first) 
### it will update new key:value pair for new loop of Shell script
dicoMax.update(mList)
### Save the updated mList in maxList
a=open('maxList.py', 'w')
a.write("mList=%s\n" % dicoMax)
a.close()