Seite 1 von 1

Python3 Program in cmd ausführen

Verfasst: Sonntag 21. März 2021, 09:14
von AlexE
Hallo zsammen,

ich bin ein absoluter Anfänger in Sache Python und stehe nun vor einem Problem wo ich mal etwas input brauche.

ich möchte ein Program welches sich über CMD aufrufen lässt von python ausführen lassen.

Seit 3 Tagen probiere ich alle mögliche Codeschnipsel aus, leider ohne Erfolg.

in der Batch wird das Program wie folgt ausgeführt. Hierbei werden die conf und die*nwd an die exe übergeben.

Code: Alles auswählen

C:\Program Files\Autodesk\Navisworks Manage 2021\FiletoolsTaskRunner.exe /i 'pfad\conig.txt' /of pfad\ausgabedatei.nwd
Sowohl die conf, als auch der Codestring habe ich fertig. Sogar inklusive SQL Anbindung ;)

jetzt möchte ich str_config und str_paht als variablen an die exe in einer CMD übergeben.

Print gibt den String so aus wie ich in der CMD brauche.

Code: Alles auswählen

C:/Program Files/Autodesk/Navisworks Manage 2021/FiletoolsTaskRunner.exe /i Y:/12_Projekte/FAIR/_Entwickungsumgebung/python/fairtool/tmp/Y:/12_Projekte/FAIR/_Entwickungsumgebung/python/fairtool/tmp/G0702A.tmp /of Y:/12_Projekte/FAIR/_CAD_DATEN_FAIR/_Navisworks_Projekte/FT-G702-NW-0000002.nwd
ich habe es bisher mit os.system cmd versucht, hier wird aber entweder der Pfad oder die variablen angemeckert.

Kann mir evtl jemand erklären mit welchem modul ich das ganze an CMD übergeben kann?


Gruß Alex

Re: Python3 Program in cmd ausführen

Verfasst: Montag 22. März 2021, 13:12
von pycoding.de
Du bist auf Windows oder?

Re: Python3 Program in cmd ausführen

Verfasst: Dienstag 23. März 2021, 14:40
von DeaD_EyE

Code: Alles auswählen

import shlex
import subprocess


cmd = [
    r"C:\Program Files\Autodesk\Navisworks Manage 2021\FiletoolsTaskRunner.exe",
    r"/i", "pfad\conig.txt",
    r"/of", "pfad/ausgabedatei.nwd",
]


cmd2 = shlex.split(r"'C:/Program Files/Autodesk/Navisworks Manage 2021/FiletoolsTaskRunner.exe' /i Y:/12_Projekte/FAIR/_Entwickungsumgebung/python/fairtool/tmp/Y:/12_Projekte/FAIR/_Entwickungsumgebung/python/fairtool/tmp/G0702A.tmp /of Y:/12_Projekte/FAIR/_CAD_DATEN_FAIR/_Navisworks_Projekte/FT-G702-NW-0000002.nwd")


print(cmd2)


# subprocess.run(cmd)
# subprocess.run(cmd2)
Bitte auch gleich in der Dokumentation nachsehen was shlex.split macht und was subprocess.run macht.
os.popen, os.system soll man nicht mehr benutzen, da es veraltet ist.


PS: Aufgrund der Backslashes habe ich regex-strings verwendet. Der prefix r sorgt dafür, dass nur noch \" und \' interpretiert werden, aber alles andere durch \ nicht. z.B. ist \b das Steuerzeichen für bell. Man kann auch die normalen Schrägstriche verwenden. Viel besser ist noch die Verwendung von pathlib.Path.

Re: Python3 Program in cmd ausführen

Verfasst: Donnerstag 8. April 2021, 16:22
von AlexE
Arsch über mein Haupt das ich mich jetzt erst melde.

Danke für die Hilfestellung. Habe es inzwischen realisieren können mit os.system lösen können.

Will das ganze aber noch auf subprocess.call umbauen, bin aber dazu noch nicht gekommen.

Hier das Ergebnis, wenn noch was auffällt nur raus damit.

Code: Alles auswählen

import subprocess
import os


def func_nwx(str_prog,config,path):

    os.system(('%sFiletoolsTaskRunner.exe.lnk /i \"%s" /of \"%s"') % (str_prog,config,path))
PS. Jup unter Windoof, ein teile der Module laufen aber in LNX.

Gruß Alex

Re: Python3 Program in cmd ausführen

Verfasst: Donnerstag 8. April 2021, 18:20
von Sirius3
func_nwx ist ein bescheidener Name. Dass es eine Funktion ist, ist klar, weil man das Ding ja aufruft. nwx ist eine kryptische Abkürzung, aber Code sollte einem nicht solche Rätsel stellen.
Bei str_prog hat das str nichts verloren, weil klar ist, dass ein Programmname ein String ist.
Wobei das von deinem Code aus eher wie ein Pfad aussieht.
Und statt os.system solltest Du subprocess.run benutzen und statt irgendwas per Stringformatierung zusammenzustückeln benutzt man Listen für die Argumente.

Code: Alles auswählen

def call_nwx(programm_path, config, path):
    subprocess.run([
        os.path.join(programm_path, "FiletoolsTaskRunner.exe.lnk"),
        "/i", config,
        "/of", path
    ])

Re: Python3 Program in cmd ausführen

Verfasst: Donnerstag 8. April 2021, 18:28
von AlexE
Sorry,

ich bitte seit über einem Jahr um Unterstützung in der Automatisierung und Koordination eines Megaprojektes in 3mrd Bereich. Ich bin da blutiger Anfänger.

nw steht für Navisworks, dieses Tool kann verschiedene Exporte die nutze, daher das x.... klingt für mich logisch und ich habe es in der Zentralen config auch sehr gut dokumentiert.
Falls sich dann doch mal welche finden sollten die mitmachen und Ahnung davon haben bin ich gerne bereit eine Vernünftige Bezeichung zu vergeben.

habe es jetzt erstmal so gelöst.

Code: Alles auswählen

import subprocess


def func_nwx(str_prog,config,path):

    cmd = [
        r"C:\Program Files\Autodesk\Navisworks Manage 2021\FiletoolsTaskRunner.exe",
        "/i", config,
        "/of", path,
            ]
    subprocess.run(cmd)
PS: das call_* werde ich übernehmen, erscheint mir logisch ;)

Gruß Alex