运行 来自特定 /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()
我想制作一个抽象脚本,它将每小时激活一次,运行 来自特定目录的所有脚本。两个还是十几个都无所谓
当我运行
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()