1

有什么方法可以运行位于终端同一目录中的多个 .py 文件?

例子:

假设我有三个 .py 文件

x.py
y.py
z.py

我已将这些文件保存在目录 abc 中

在终端中,我会这样执行 x.py

python ~/abc/x.py

并且必须重复运行 y.py 和 z.py

有没有办法同时运行所有三个脚本?还是什么捷径?比打开多个终端窗口节省时间?

谢谢

4

4 回答 4

1

假设 bash:

for i in x y z; do python ~/abc/$i.py & done

这个循环遍历字符串“x”、“y”和“z”。每次迭代,变量$i都是其中的另一个。所以在第一次迭代中,$ix,所以~/abc/$i.py~/abc/x.py。第二次迭代是相同的,只有 y,第三次$ix

所以bash实际上做

python ~/abc/x.py &
python ~/abc/y.py &
python ~/abc/z.py &

这就是你所要求的。

&使其在后台运行。您可以对调用的任何命令执行此操作。

于 2013-06-30T18:42:46.077 回答
1

我经常使用类似(在 bash 中)

for file in $( ls *.py )
  do
    python $file
  done

当我有很多 python 文件并想要运行所有这些文件时,我会使用 thos。

于 2013-06-30T18:47:31.347 回答
0

既然其他人已经给了你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.fy.f都已z.f定义

def f(x):
    print(x)

那么上面的代码将输出:

1

2

3

可能,但不一定,按这个顺序。

于 2013-06-30T18:55:42.220 回答
0

.bash 文件

ls *.py | xargs -I{} sh -c "echo {}; python {}"

您可以使用命令获取当前目录中的所有 .py 文件ls *.py

并用于xargs -I从标准输入执行

sh -c 使用命令运行目录中的所有 .pypython {} 自动将 {} 替换为 .py 文件

于 2019-11-17T12:53:21.880 回答