Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从特定的/dir/in循环运行多个scripts.py_Python_Loops_Directory_Execute - Fatal编程技术网

Python 从特定的/dir/in循环运行多个scripts.py

Python 从特定的/dir/in循环运行多个scripts.py,python,loops,directory,execute,Python,Loops,Directory,Execute,我想制作一个抽象脚本,它将每小时激活一次,并从特定目录运行所有脚本。不管是两个还是一打 当我跑的时候 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/Desk

我想制作一个抽象脚本,它将每小时激活一次,并从特定目录运行所有脚本。不管是两个还是一打

当我跑的时候

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),但没有成功

子流程。根据我的经验,调用
是正确的方法。如果您运行的只是
.py
文件,那么我认为问题在于
调用
数组中没有python。e、 g

subprocess.call(['c:/path/to/python', script_list.pop()])
让我再说一次@Chris_Rands,我强烈希望这是一个带有标记类的python模块。i、 e

directory
-- __init__.py
-- script1.py
-- script2.py
-- script3.py
使用script1.py、script2.py等,在一个类上定义一个
run
方法,该类将标记类子类化,如
Runnable
。然后,您可以使用以下代码在给定目录中运行所有
Runnable
s:

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()

您可以通过
子流程
或类似方式调用
python/dir/*.py
;或者导入所有模块并调用它们。我正在使用api获取数据,由于某种原因,它会在线程thread-1和thread-2中引发异常。它表示未定义获取API的对象。无论如何,这可能是由Windows造成的,我想在一周左右的时间内在rpi上运行它。这个跨操作系统可能会导致更多的bug。无论如何,谢谢你,我会详细研究这个选项。它看起来不错,但我没有足够的技能创建自己的抽象模块,还有一些东西我没有在你的代码中得到。但我保证半年后我会参加!不管怎样,我正试图用子流程来执行它。它们都是
.py
脚本。每当我使用
subprocess.call时,我忘了编写它。我得到
WindowsError:[Error 193]%1不是有效的Win32应用程序
。但我想我就到此为止,我想在Rpi上运行它,目前我在Windows上,所以在Pi上测试代码可能更明智。谢谢你的回答。