2017-06-29 20 views
0

をバッチファイルを実行します。は、私は、次の(Windowsの場合)のようなAAファイル構造を持っている別のディレクトリに

D:\ 
    dir_1\ 
     batch_1.bat 
     dir_1a\ 
      batch_2.bat 
    dir_2\ 
     main.py 

この質問のために、batch_1.batは、単にbatch_2.batを呼び出し、次のようになります。

cd dir_1a 
start batch_2.bat %* 

コマンドプロンプトからbatch_1.batを開くと、確かにbatch_2.batが表示され、そこからすべてが金色になります。

私のPythonファイルD:\dir_2\main.pyは、batch_2.batを開始してbatch_1.batという新しいプロセスを起動します。だから私は、次のPythonのコードは動作するはずです考え出し:

import subprocess 

subprocess.Popen(['cd "D:/dir_1"', "start batch_1.bat"], shell=True) 

これは私のPythonのコンソールに出力されている「システムは指定されたパスを見つけることができません」になります。 (もちろんエラーは発生しません)。これは最初のコマンドによるものです。

subprocess.Popen(['cd "D:/"'], shell=True) 

は、私もそうのように、直接バッチファイルを起動しようとした:私は完全に取得しない理由から

subprocess.Popen("start D:/dir_1/batch_1.bat", shell=True) 

、この私が、私はそれを削減しても同じ結果を得ますWindowsのコマンドプロンプトを開くだけであると思われます。dir_2です。

私はこのコマンドのstart部分を除いていれば、私のPythonプロセスは終了して終了するつもりです。私はしたくありません。しかし、それは少しさらに得るん:

subprocess.Popen("D:/dir_1/batch_1.bat", shell=True) 

は、これは、その結果Pythonスクリプトのディレクトリではなく、batch_1.batのディレクトリが、見つけることができない、batch_1.bat成功しdir_2に...実行し、その結果dir_1a\であるため、batch_2.batはまったく実行されません。

非常に混乱しています。何が間違っているのですか?代わりに何をしなければなりませんか?

+0

あなたは 'subprocess.Popen(r'startのDしようとしました:\ dir_1を\ batch_1.bat '、shell = True、cwd = r'd:\ dir_1') '? – falsetru

+0

'&&'を使うと、 'Popen( 'cd D:/ dir_1/&& start batch_1.bat'、shell = True)' – Stack

答えて

1

あなたの質問がここで回答されています。一言で言えばPython specify popen working directory via argument

を、ちょうどPopenにオプションのCWDの引数を渡す:

subprocess.Popen(["batch_1.bat"], shell=True, cwd=r'd:\<your path>\dir1') 
関連する問題