2017-07-10 4 views
-1

Ich habe eine .bat-Datei erstellt, wo ich den Lauf eines OpenSource-Programms automatisieren möchte. Wie Sie vielleicht sehen, verwende ich den Code unten, aber sobald das virtuelle env aktiviert ist, ändert es das Verzeichnis von dort nicht, so dass es ein Python-Skript ausführen kann. Ich habe einige Modifikationen ausprobiert, die hier gefunden wurden, aber nichts davon schien für mich zu funktionieren. Was sollte ich tun, damit das Skript ordnungsgemäß funktioniert?Probleme beim Ausführen von Python-Skript aus Windows-Batch-Datei

Vielen Dank.

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 

Antwort

1

verwenden Batch-Code:

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 

Der Befehl CD ohne Option /D nichts tut, wenn das aktuelle Verzeichnis und angegebene Verzeichnis nicht auf demselben Laufwerk befinden. Daher ist es ratsam, immer die Option /D zu verwenden, um den vollständigen Pfad eines Verzeichnisses anzugeben, das zum aktuellen Verzeichnis werden soll.

Der Befehl START läuft eine Batch-Datei oder Konsolenanwendung in einem neuen Befehlsprozess, der auf nicht verwendet zusätzlich die Möglichkeit, parallel zum Strombefehlsprozess ausgeführt wird /WAIT aktuellen Befehlsprozess zu stoppen, bis sie beendet gestartet Befehlsprozess.

Die Stapeldatei legt offensichtlich Umgebungsvariablen fest. Dies geschieht im zusätzlichen Befehlsprozess, der keine Auswirkungen auf Umgebungsvariablen des aktuellen Befehlsprozesses hat, da jeder Prozess seine eigene Liste von Umgebungsvariablen hat, die beim Start des Prozesses von Windows aus dem aktuellen Prozess kopiert wurden.

Wenn die Batch-Datei activate als Dateierweiterung .cmd hat, muss die zweite Zeile im Batch-Code entsprechend angepasst werden.

Der Befehl CALL wird benötigt, um die Batch-Datei aufzurufen, die die Umgebungsvariablen jetzt in der Umgebung des aktuellen Befehlsprozesses setzt. Sobald die Ausführung dieser aufgerufenen Batchdatei beendet ist, wird der aktuelle Befehlsprozess mit der dritten Zeile der aktuellen Batchdateiausführung fortgesetzt, außer dass die Batchdatei activate den Befehl ohne Option /B oder einen Syntaxfehler enthält.

Last des Befehl START verwendet wird Python in einem neuen Befehlsprozess mit den Umgebungsvariablen von Windows von aktuellem Befehlsprozess mit C:\Projects\my_project Satz als aktuelles Verzeichnis kopiert laufen.

Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.

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

Siehe auch die Stack-Überlauf Antworten auf die Fragen:

+0

Ohne '/ b ', die' Starten' Befehl sagt 'CreateProcess' eine neue Konsole zu erstellen, wenn das, was Sie von einem„neuen Befehlsprozess“bedeuten. In Windows 7 muss der Windows-Server (csrss.exe) eine neue Konsole (conhost.exe) erstellen und den Prozess anhängen. In Windows 8+ wird der Startcode im Prozess (kernelbase.dll) erstellt und an eine Konsole über Dateihandles angehängt. Er wird auf dem Konsolengerät (\ Device \ ConDrv) geöffnet. Es öffnet "Server", "Referenz" und "Verbinden", um die Konsole zu erstellen und anzuhängen. Dann öffnet "Input" als "StandardInput" und "Output" als "StandardOutput" und "StandardError". – eryksun

+0

@Mofi Ich habe versucht, den Code, aber es scheint nicht für mich arbeiten ... auch die cmd schließt schnell, so habe ich "Pause" -Befehl enthalten, so um seinen Fortschritt zu überprüfen, aber es schließt auch nach der Ausführung, so kann ich die Elasticsearch nicht ausführen danach mit "start C: \ Projekte \ elasticsearch-5.2.1 \ bin \ elasticsearch". Vielleicht gibt es noch eine andere Arbeit? überprüfte die Hinweise/Hilfe, die Sie mir gaben, sie sind sehr informativ. Danke im Voraus! –

+0

@GeorgeL Lesen Sie [Debuggen einer Batchdatei] (https://Stackoverflow.com/a/42448601/3074564) und nutzen Sie diese Informationen. Die Ausführung der Batch-Datei schlägt fehl, weil ein Syntaxfehler vom Windows-Befehlsinterpreter entweder in Ihrer Batch-Datei ausgegeben wird, wie die Datei als Uniode-Datei mit BOM anstelle der ANSI-Datei oder in der aufgerufenen Batch-Datei 'activate' speichert. Wenn das später der Grund ist, können wir Ihnen nicht helfen, ohne den Code dieser Batch-Datei und die Ausgabe-Fehlermeldung zu sehen. – Mofi

Verwandte Themen