2016-07-28 13 views
-1

私は数日間、多くのサイトで回答を探しました。どこかに答えがあるなら、あなたが私に指摘すればいいです。バッチファイル "A"をテキストファイル "B"を読み込み、バッチファイル "C"でコードを置き換えようとしています。最初に実行すると、これが実行され、バッチファイル "C"が実行されます。バッチファイル "C"が実行されている間、バッチファイル "A"は、ファイルの最後の変更部分の変更のためのテキストファイル "B"を見ています。変更が検出されたら、バッチファイル "C"を停止し、テキストファイル "B"をバッチファイル "C"に読み書きしてから、再度バッチファイル "C"を起動する必要があります。バッチファイルを削除する必要があります

変更が検出されるたびにバッチファイル "A"を実行すると、 "C"という新しいバッチファイルが実行されます。私はp.terminate()とp.kill()どちらも作品を使用しようとした

import subprocess 
    p = subprocess.Popen(r'start cmd /c C:\Users\james\Documents\FollowMeMap.bat', shell=True) 

は、バッチファイル "C" 私が使用を開始します。誰もが助けてくれてありがとう。

+0

のPython 3.4でテスト済み)プロセスに 'CMD/C "\ユーザーは、ジェームズ\ドキュメント\ \ FollowMeMap.bat CMD/C Cスタート" を= True'である。単に 'shell = True'を使わないでバッチファイルを実行するのはなぜですか?新しいコンソールウィンドウが必要な場合は、 'p = subprocess.Popen(r'C:¥Users¥james¥Documents¥FollowMeMap.bat '、creationflags = subprocess.CREATE_NEW_CONSOLE)'を使用します。このように、プロセス 'p'は" FollowMeMap.bat "を実行している実際のcmd.exeインスタンスです。それを' p.kill() 'することができます。 – eryksun

答えて

0

窓で私はそれを使用し、それは正常に動作します。 win32 apiを直接呼び出すことによっても行うことができます。

os.system ("taskkill /F /PID "+str (p.pid)) 

Pがサブプロセスpopenオブジェクトです。

編集:これは恐らくstartというプレフィックスのために動作していません。あなたは、Pythonスレッドを作成し、実際のコマンドでPopenを実行する必要があります。ここに実例があります。

私はクラスを作成したので、グローバル変数は必要ありません(私はそれらを嫌いです)。これは、一度開始したstart()のスレッドを作成し、Popenを実行します。実行可能ファイルを実行するので、shell=Trueは必要ありませんが、.batファイルの場合はおそらくそれが必要です。 pオブジェクトを専用の__pipe属性に格納して待機します。

doitメソッドは、スレッドを開始した後、5秒間待ってから、試したコマンドを使用してパイプを強制終了します。

あなたの試行との違いは、それが窓startコマンドを必要としないということですが、バックグラウンドで実行するのpythonを使用して、それはプロセスのよりよい制御(startだけのプロセスを発射して停止しているので、あなたは何の情報も持っていません`、のために`シェル:

は、あなたが実行している

import threading 
import subprocess 
import time 

class Runner(): 
    def run_command(self): 
     p = subprocess.Popen("notepad.exe") 
     self.__pipe = p 
     p.wait() 

    def doit(self): 
     t = threading.Thread(target=self.run_command) 
     t.start() 
     time.sleep(5) 
     self.__pipe.terminate() 

r = Runner() 
r.doit() 
+0

私はあなたのコードを挿入しましたが、何もしないようです。私がPythonにちょっと新しくなったので、バッチファイルを実行する前に変更が必要だったのですか?注:私のsubprocess.popenはp =ファイル内にあります – MagicUsr87

+0

私の悪い:この 'start'コマンドは便利ですが悪いです:) –

関連する問題