有什么方法可以运行位于终端同一目录中的多个 .py 文件?
例子:
假设我有三个 .py 文件
x.py
y.py
z.py
我已将这些文件保存在目录 abc 中
在终端中,我会这样执行 x.py
python ~/abc/x.py
并且必须重复运行 y.py 和 z.py
有没有办法同时运行所有三个脚本?还是什么捷径?比打开多个终端窗口节省时间?
谢谢
假设 bash:
for i in x y z; do python ~/abc/$i.py & done
这个循环遍历字符串“x”、“y”和“z”。每次迭代,变量$i
都是其中的另一个。所以在第一次迭代中,$i
是x
,所以~/abc/$i.py
是~/abc/x.py
。第二次迭代是相同的,只有 y,第三次$i
是x
。
所以bash
实际上做
python ~/abc/x.py &
python ~/abc/y.py &
python ~/abc/z.py &
这就是你所要求的。
&
使其在后台运行。您可以对调用的任何命令执行此操作。
我经常使用类似(在 bash 中)
for file in $( ls *.py )
do
python $file
done
当我有很多 python 文件并想要运行所有这些文件时,我会使用 thos。
既然其他人已经给了你shell解决方案,让我提出一个pythonic的解决方案:
from multiprocessing import Process
import x
import y
import z
# Assuming you have a main function f in each module
p1 = Process(target=x.f, args = (1,)) # or whatever args
p1.start()
p2 = Process(target=y.f, args = (2,))
p2.start()
p3 = Process(target=z.f, args = (3,))
p3.start()
这是 Python 3.3 代码,您可能需要在 Python 2.7 中做一些不同的事情。
例如,如果x.f
和y.f
都已z.f
定义
def f(x):
print(x)
那么上面的代码将输出:
1
2
3
可能,但不一定,按这个顺序。
.bash 文件
ls *.py | xargs -I{} sh -c "echo {}; python {}"
您可以使用命令获取当前目录中的所有 .py 文件ls *.py
并用于xargs -I
从标准输入执行
sh -c
使用命令运行目录中的所有 .pypython {}
自动将 {} 替换为 .py 文件