2017-07-10 20 views
-1

私はopensourceプログラムの実行を自動化したい.batファイルを作成しました。下のコードを使用していますが、一度仮想envが有効にされると、そこからディレクトリが変更されず、pythonスクリプトが実行されることがあります。私はここにいくつかの修正を試みたが、それは私のために働くように見えなかった。スクリプトを正しく動作させるにはどうすればよいですか?WindowsバッチファイルからPythonスクリプトを実行する際の問題

ありがとうございます。

rem Virtual environment works 
cd "C:\Projects" 
start ENV\Scripts\activate 

rem DOES NOT CHANGE THE DIRECTORY SO IT MAY RUN PYTHON SERVER, TRIED ALSO SEVERAL MODIFICATIONS BUT STILL HAVE THE SAME ISSUE, ALSO PYTHON WONT START 
rem COMMAND TO START SERVER--> python manage.py runserver 

cd "C:\Projects\my_project" 
start C:\Python27\python.exe C:\Projects\my_project\manage.py runserver 

答えて

1

使用このバッチコード:カレントディレクトリと指定されたディレクトリが同じドライブ上にない場合

cd /D "C:\Projects" 
call ENV\Scripts\activate.bat 
start "Run Server" /D "C:\Projects\my_project" C:\Python27\python.exe C:\Projects\my_project\manage.py runserver 

コマンドCDオプション/Dなしには何もしません。したがって、現在のディレクトリになるディレクトリのフルパスを指定する場合は、常にオプション/Dを使用することをお勧めします。

コマンドSTARTは終了し、コマンド・プロセスを開始するまで、現在のコマンド・プロセスを停止するためにさらにオプション/WAITを使用していない上、現在のコマンド処理に並行して実行され、新たなコマンド処理でバッチファイルやコンソールアプリケーションを実行します。

バッチファイルは明らかに環境変数を設定します。これは、現在のコマンドプロセスの環境変数には影響を与えない追加のコマンドプロセスで行われます。各プロセスには、現在のプロセスからWindowsがプロセスの開始時にコピーする環境変数のリストがあるからです。

バッチファイルactivateのファイル拡張子が.cmdの場合、バッチコードの2行目はそれに応じて変更する必要があります。

コマンドCALLは、現在のコマンド処理の環境にある環境変数を設定するバッチファイルを呼び出すために必要です。この呼び出されたバッチファイルの実行が終了すると、バッチファイルactivateにはコマンドexit(オプション/Bまたは構文エラーなし)が含まれていますが、現在のバッチファイル実行の3行目で現在のコマンドプロセスが続行されます。

最終コマンドSTARTは、現在のディレクトリとしてC:\Projects\my_projectセットで現在のコマンド・プロセスからのWindowsによってコピーされた環境変数を使用して新しいコマンド処理でのPythonを実行するために使用されます。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。

  • call /?
  • cd /?
  • start /?

また質問のスタックオーバーフローの回答を参照してください。

+0

'/ B'なければそれはあなたが「新しいコマンド処理」によって何を意味するかだ場合、' start'コマンドは、新しいコンソールを作成するには、 'CreateProcess'を伝えます。 Windows 7では、これはWindowsサーバー(csrss.exe)が新しいコンソール(conhost.exe)を作成し、それにプロセスをアタッチします。 Windows 8以降では、プロセスの起動コード(kernelbase.dll)が作成され、コンソールデバイス(\ Device \ ConDrv)で開くファイルハンドルを介してコンソールに接続されます。 「サーバー」、「参照」、および「接続」を開き、コンソールを作成し、コンソールに接続します。次に、 "StandardInput"と "StandardError"として "StandardInput"と "Output"として "Input"を開きます。 – eryksun

+0

@Mofi @Mofiコードを試しましたが、それは私のために動作していないようです...また、cmdが急速に閉じるので、私は "一時停止"コマンドをその進捗状況を確認するために含めましたが、実行後も閉じますので、その後 "start C:\ Projects \ elasticsearch-5.2.1 \ bin \ elasticsearch"と入力します。多分別の仕事がありますか?ヒント/あなたが私に与えた助けを借りて彼らは非常に有益であることを確認した。前もって感謝します! –

+0

@GeorgeL [バッチファイルのデバッグ](https://stackoverflow.com/a/42448601/3074564)を読み、これらの情報を利用してください。 Windowsコマンドインタープリタがバッチファイルに出力する構文エラーのため、バッチファイルの実行は失敗します。これは、ANSIファイルの代わりにBOMを使用してファイルを保存するか、バッチファイル 'activate'を呼び出すようにファイルを保存することです。後で理由がある場合は、このバッチファイルのコードと出力エラーメッセージが表示されずにお手伝いできません。 – Mofi

関連する問題