如何指导sh脚本运行python脚本?

时间:2015-04-14 15:51:53

标签: python linux sh

我写了一个python脚本,它调用两个文件来执行一些计算,并要求新文件的名称放置计算,所以我的代码运行如下:

python code.py in_file1 in_file2 outfile

现在,我有几个需要相同计算的文件,它们的名称只会被最后一个数字改变,所以我想做一个脚本,在文件夹中获取所需的不同文件,执行python脚本并命名输出仅更改根据给定的in_file1的las编号(infield_2实际上没有改变)。

我尝试了一些简单但不起作用的事情

#!/bin/bash
python code.py in_file[19]* infile_2 outfile[19]*

我从python的使用中得到一个错误,说明用法:in2中无法识别的参数中的python code.py [-h]

我确信code.py可以正常工作,我只想一次做一个文件。谢谢。我是python和linux的新手,感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

你可以在Python中做同样的事情

from subprocess import call

fname="in_file{} infile2 outfile{}"
for x in xrange(1,11):
    d=call(["python","code.py",fname.format(x,x)])
    if d:
        print "Error executing: {}".format(d)

如果您执行以下

fname="in_file{}"
for x in xrange(1,11):
    print ["python","code.py",fname.format(x)]

将打印以下内容

['python', 'code.py', 'in_file1']
['python', 'code.py', 'in_file2']
['python', 'code.py', 'in_file3']
['python', 'code.py', 'in_file4']
['python', 'code.py', 'in_file5']
['python', 'code.py', 'in_file6']
['python', 'code.py', 'in_file7']
['python', 'code.py', 'in_file8']
['python', 'code.py', 'in_file9']
['python', 'code.py', 'in_file10']

答案 1 :(得分:1)

shell只是在那里展开通配符in_file[19]*,然后进入所有匹配文件的列表。这里没有循环。如果你想要一个循环,你需要一个显式的循环,比如

#!/bin/bash
for file in in_file[19]*; do
    python code.py "$file" infile_2 "out${file#in}"
done

其中变量file依次分配给每个匹配的文件,变量替换${var#prefix}扩展为var的值,其中删除了任何字符串prefix开始。

顺便提一下,如果您python可执行,code.py是多余的,并确保它具有正确的shebang line

另请注意,[19]与单个字符匹配,因此您的通配符会匹配名称以in_file1in_file9开头但不包含其他文件的所有文件。我推测可能不是你的意思。

答案 2 :(得分:0)

您可以在中执行此操作:

import os

name = "in_file%d"
for i in range(1, 21):
    os.system("python code.py in_file{} in_file2 outfile{}".format(i, i))

如下所示,os库调用输出的字符串:

>>> for i in range(1, 21):
...     "python code.py in_file{} in_file2 outfile{}".format(i, i)
... 
'python code.py in_file1 in_file2 outfile1'
'python code.py in_file2 in_file2 outfile2'
'python code.py in_file3 in_file2 outfile3'
'python code.py in_file4 in_file2 outfile4'
'python code.py in_file5 in_file2 outfile5'
'python code.py in_file6 in_file2 outfile6'
'python code.py in_file7 in_file2 outfile7'
'python code.py in_file8 in_file2 outfile8'
'python code.py in_file9 in_file2 outfile9'
'python code.py in_file10 in_file2 outfile10'
'python code.py in_file11 in_file2 outfile11'
'python code.py in_file12 in_file2 outfile12'
'python code.py in_file13 in_file2 outfile13'
'python code.py in_file14 in_file2 outfile14'
'python code.py in_file15 in_file2 outfile15'
'python code.py in_file16 in_file2 outfile16'
'python code.py in_file17 in_file2 outfile17'
'python code.py in_file18 in_file2 outfile18'
'python code.py in_file19 in_file2 outfile19'
'python code.py in_file20 in_file2 outfile20'
>>>