Äquivalent zu Unix-eval in Windows
Frage mich, wie Sie tun würde Folgendes in Windows:
Aus einer c-shell-Skript (Dateiendung csh), bin ich mit einem Python-Skript in eine "eval" - Methode, so dass die Ausgabe des Skripts wirkt sich auf die shell-Umgebung. Sieht wie folgt aus:
eval `python -c "import sys; run_my_code_here(); "`
Frage mich, wie ich sowas machen würde, wie die eval-Anweisung in Windows mithilfe von Windows' eingebaute CMD-shell. Ich möchte zum ausführen eines Python-Skript in einem Windows-Skript und das Skript laufen lassen, was das Python-Skript druckt.
** update: die angegebene Interesse an der Ausführung von CMD-shell.
- Bitte seien Sie spezifisch darüber, welche shell Sie verwenden. CMD ist meine beste Vermutung, aber vielleicht meinst du die PowerShell oder ein Windows-port von CSH.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es in
cmd.exe
eine temporäre Datei ist die einzige Möglichkeit, [die ich kenne]:(Einige Vermutungen, wo details fehlen bei deiner Frage)
In CMD, wenn ein batch-Skript ändert die Umgebung, die Standard-Verhalten ist, dass es ändert die Umgebung des CMD-Prozess, der ausgeführt wird.
Nun, wenn Sie eine batch-Skript ruft eine andere batch-script gibt es 3 Möglichkeiten, es zu tun.
führen Sie die batch-Datei direkt:
In der Regel wollen Sie nicht, weil Sie nicht zurückkehren an die aufrufende batch-Skript. Das ist mehr wie
goto
alsgosub
. Der CMD-Prozess nur den Wechsel von einem Skript zum anderen.ausführen mit
call
:Dies ist der häufigste Weg für eine batch-Datei eine andere aufrufen. Wenn
q.bat
beendet, die Steuerung wird an den Aufrufer zurückgeben. Da dies die gleiche CMD-Prozess, änderungen an der Umgebung wird noch da sein.Hinweis: Wenn
q.bat
verwendet dieEXIT
Aussage, es kann die Ursache der CMD-Prozess zu beenden, ohne wieder die Kontrolle an das aufrufende Skript.Hinweis 2: Wenn
q.bat
verwendetEXIT /B
, dann die CMD-Prozess wird nicht beendet. Dies ist nützlich für die EinstellungERRORLEVEL
.Ausführen in einem neuen CMD-Prozess:
Da q.bat Lauf ins neue CMD-Prozess, es wirkt sich auf die Umgebung des Prozesses, und nicht die CMD, die der Anrufer ausgeführt wird.
Hinweis: Wenn
q.bat
verwendetEXIT
es nicht, den Prozess zu beenden, der Anrufer.Den
SETLOCAL
CMD Befehl erstellen Sie eine neue Umgebung für das aktuelle script. Veränderungen in diesem Umfeld wirken sich nicht auf den Anrufer. Im AllgemeinenSETLOCAL
ist eine gute Praxis, um zu vermeiden undicht Umgebung ändert sich durch einen Unfall.Verwenden
SETLOCAL
und noch push-Umgebung änderungen an die aufrufende script, am Ende des script mit:Dieses schieben der Werte von X und Y in die übergeordneten Umwelt.
Wenn auf der anderen Seite, die Sie ausführen möchten anderen Prozess (nicht ein CMD-Skript) und haben Sie Einfluss auf den aktuellen Skript die Umgebung, als das Werkzeug, erzeugen Sie eine batch-Datei, dass macht die änderungen, die Sie wollen, dann führen Sie diese batch-Datei.