2017-01-09 3 views
1

抽象的なスクリプトを作成して、1時間ごとに起動し、特定のディレクトリからすべてのスクリプトを実行します。 2人か12人の人がいるかどうかは関係ありません。私は特定の/ dir/inループから複数のscripts.pyを実行します

import os 

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

を実行すると

それは私が(代わりに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)とrun(item)を試してみました。

+0

。またはすべてのモジュールをインポートして、それらを –

答えて

1

subprocess.callは、私の経験からここに行く正しい方法です。実行しているすべてが.py個のファイルである場合、問題はあなたのcall配列にPythonを持たないことと関係していると思います。例えば、

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

そして、ここで私二@Chris_Randsが、私は強く、これはマーカークラスでのpythonモジュールとして行われていることを好むてみましょう。即ち、Runnableようなマーカークラスのサブクラスクラスにrunメソッドを定義等script1.py、script2.pyと

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

、。次に、指定されたディレクトリ内のすべてのRunnable Sを実行するには、次のコードを使用することができます。私は私のLinuxのFSに同じ問題を持っていない

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

と呼びます。いい感じですが、自分の抽象的なモジュールを作成するのに十分なスキルがなく、あなたのコードでは得られないことがいくつかあります。しかし、私は半年でそれに入ることを約束します! とにかく、これをサブプロセスで実行しようとしています。それらはすべて '.py'スクリプトです。 'subprocess.call'を使うたびに' WindowsError:[エラー193]%1は有効なWin32アプリケーションではありません。 'というメッセージが表示されるのを忘れてしまいました。しかし、私はここでやめて、Rpiで実行したいと思いますが、現在はWindows上にいるので、Pi自体のコードをテストするほうが賢明かもしれません。あなたの答えをありがとう。 –

1

これは何について:このように私はあなたで動作するようにいくつかのコードを与えることを試みることができます。

あなたがsubprocess`または類似 `経由`のpython/DIR/* py`呼び出すだけでした
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() 
+0

私はapiを使ってデータを取得していますが、なんらかの理由でスレッドThread-1とThread-2で例外が発生します。 APIを取得するオブジェクトは定義されていません。とにかくそれはWindowsによって引き起こされるかもしれません、そして、私はrpiでそれを1週間ほどで実行したいと思います。このcross-osによって引き起こされる多くのバグがあるかもしれません。とにかくおかげさまで、私はこのオプションをさらに詳しく見ていきます。 –

関連する問題