运行 来自特定 /dir/ 循环的多个 scripts.py

Run multiple scripts.py from a specific /dir/ in loop

我想制作一个抽象脚本,它将每小时激活一次,运行 来自特定目录的所有脚本。两个还是十几个都无所谓

当我运行

import os

for item in os.listdir(r'C:/directory/Desktop'):
     execfile(item)

它说没有这样的文件,即使我列出它们(使用 print 而不是 execfile)我也看到了所有这些文件。我决定获取它们每个的确切目录。

import os

for item in os.listdir(r'C:/directory/Desktop'):
     execfile(r'C:/directory/Desktop/%s'%item)

它在 运行找到第一个脚本后停止。那就让我们做一个不可阻挡的while循环吧。

import os

script_list = []

for item in os.listdir(r'C:/directory/Desktop'):
    script_list.append(item)

while len(script_list) > 0:
    execfile(r'C:/directory/Desktop/%s'%(script_list.pop()))

当它也不起作用时,我感到非常惊讶。再一次,只执行了找到的第一个脚本。

所以,问题是,你们知道如何 运行 在特定目录中循环所有脚本而不知道它们的名字吗?

在我使用的每个脚本中

return sys.exit(function)

这会导致这个问题吗?

我尝试了 subprocess.call(item) 和 运行(item),但没有成功。

根据我的经验,

subprocess.call 是去这里的正确方法。如果你 运行ning 是 .py 文件,我认为问题与你的 call 数组中没有 python 有关。例如,

subprocess.call(['c:/path/to/python', script_list.pop()])

让我在这里第二个@Chris_Rands,我强烈希望将其作为带有标记 class 的 python 模块来完成。即,

directory
-- __init__.py
-- script1.py
-- script2.py
-- script3.py

与 script1.py、script2.py 等,在 class 上定义一个 run 方法,子 class 是一个标记 class 喜欢 Runnable。然后你可以使用下面的代码来 运行 给定目录中的所有 Runnable

module = import_module('directory')
for name, klass in inspect.getmembers(module):
    if name.startswith('__') or not inspect.isclass(klass): continue
    instance = klass()
    run_fn = getattr(instance, 'run', None)
    if run_fn and callable(run_fn):
        run_fn()

我的 linux FS 上没有同样的问题。因此我只能尝试给你一些代码来使用:

这个怎么样:

import os
from threading import Thread

path = "folder/path"
for item in os.listdir(path):

    def execFile():
        execfile("{:s}/{:s}".format(path,item))

    thread = Thread(target = execFile)
    thread.start()
    thread.join()