linux如何批量执行python3程序?

我有一个python写的程序,这个程序是循环打印多行字符的程序,比如这个程序文件名为a.py

正常我在控制台命令行执行:python3 a.py 参数 >> 1.txt
则会把该程序打印的所有内容存入1.txt文件中,文件的内容会根据参数的不同而不同

我写了一个shell文件,如下
python3 a.py 1 >> 1.txt
python3 a.py 2 >> 2.txt
python3 a.py 3 >> 3.txt
。。。
python3 a.py 100 >> 100.txt

当我执行这个shell文件后并不像想像的一样生成100个文件,并且文件内容几乎都为空,只有很少几个文件有内容(内容还不全)

我想知道这样的linux shell脚本怎么写,才能像手动执行100次(也就是把shell文件中每一行都手动执行)一样的效果呢?

阅读 7.1k
4 个回答

循环不需要手写啊

loop.sh

#!/bin/bash
PYTHON=`which python3`
for i in {1..100}
do
   PYTHON a.py $i >> $i.txt
done

假设你的python脚本是

#!/usr/bin/python

import sys
print 'Argument List:', str(sys.argv)

执行

$ ./loop.sh
$ ls
1.txt    15.txt    21.txt    28.txt    34.txt    40.txt    47.txt    53.txt    6.txt    66.txt    72.txt
...
$ cat *.txt
Argument List: ['a.py', '1']
Argument List: ['a.py', '10']
Argument List: ['a.py', '100']
Argument List: ['a.py', '11']
Argument List: ['a.py', '12']
Argument List: ['a.py', '13']
Argument List: ['a.py', '14']
Argument List: ['a.py', '15']
Argument List: ['a.py', '16']
Argument List: ['a.py', '17']
Argument List: ['a.py', '18']
Argument List: ['a.py', '19']
Argument List: ['a.py', '2']
...

应该是可行的,可能是其他问题,说明下你的具体操作步骤,甚至可以把代码贴出来。

@Yujiaao 说的是批量执行的正确解法之一
对于你的问题,还有空格以及 >>> 的影响

你的参数和>之间一定要有空格,否则数字参数会被bash作为重定向处理

>> 是追加写,原文件内容会保留
> 是覆盖写,原文件内容会丢弃
你的脚本每次批量执行的结果我推测是只有最近一次的有用,所以你的命令里应该使用>而不是>>

for i in {1..100};do echo $i; done | xargs -I {} sh -c "python3 a.py {} > {}.txt"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏