Ist es möglich in Python ein mehrzeiliges Batch Script einzubetten?

Hanibal545  23.07.2022, 16:57

Dass ein Python Script ein Batch Script kreiert und ausführt?

Muskelmaster161 
Fragesteller
 23.07.2022, 17:08

Nein, dass der Code eines Batch Scriptes sich im Python Code befindet und ausgeführt werden kann

3 Antworten

Das ist wohl mal wieder einer der Fälle, wenn jemand ein "Auto" gegen ein rostiges Fahrrad tauscht. 🤔🙄

Welche Grund sollte es geben aus Python heraus eine Batch zu erzeugen und diese auszuführen? Batch kann nichts, was man nicht mit Python viel besser realisieren könnte.

Der einzige Grund für ein solches vorgehen, wäre , das man weder Batch noch Python beherrscht und irgendwo Code zusammenkopiert hat, der einigermaßen das tut was man möchte.

Batchcode direkt in Python auszuführen geht nicht. Da eine Batch eine ganz gewöhnliche Textdatei ist kann man eine solche auch per Python schreiben und ausführen.

test.py

import os

MyBatch = """@echo off
echo Hallo Welt
pause"""

my_file = open("demo.cmd", "w")
my_file.write(MyBatch)
my_file.close()

os.system('"demo.cmd"')
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

ralphdieter  23.07.2022, 19:19

Hey, beleidige mein rostiges Fahrrad nicht! Es ist erst 27 Jahre alt und damit fast neu im Vergleich zu Batch.

2

Du kannst das os-Modul nutzen.

import os

os.system("your batch script ...")

Muskelmaster161 
Fragesteller
 23.07.2022, 17:28

Soweit kenn ich das. Aber kann ich hier mehrere Zeilen einbauen?

So nach dem Prinzip

os.system("echo abc

echo def")

ist das ja nicht möglich

0
Erzesel  23.07.2022, 18:23
@regex9

...mit der Kirche ums Dorf... warum nicht direkt das Verzeichnis erzeugen?

os.mkdir("dirName")
0
regex9  23.07.2022, 18:57
@Erzesel

Das Snippet von mir ist ein schematisches Beispiel um die Frage aus seinem Kommentar zu beantworten. Das sollte doch klar ersichtlich sein. 🤨

2
import os
baco="""#!/bin/sh
echo 1
echo 2
"""
with open("irgendwas.sh","w") as f:
  f.write(baco)
os.system("chmod +x irgendwas.sh")
os.system("./irgendwas.sh")

(baco → Bash-Code)