Übergeben von Argumenten in os.system

Ich muss den folgenden Befehl durch python ausführen. Rtl2gds ist ein Werkzeug, das in 2 Parametern liest: Pfad zu einer Datei und einem Modulnamen

rtl2gds -rtl=/home/users/name/file.v -rtl_top=module_name -syn 

Ich lese im Pfad zum Datei- und Modulnamen vom Benutzer über argparse wie unten gezeigt:

 parser = argparse.ArgumentParser(description='Read in a file..') parser.add_argument('fileread', type=argparse.FileType('r'), help='Enter the file path') parser.add_argument('-e', help='Enter the module name', dest='module_name') args = parser.parse_args() os.system("rtl2gds -rtl=args.fileread -rtl_top=args.module_name -syn") 

Aber der Dateipfad, der in args.fileread gelesen wird, kommt nicht zum os.system, wenn ich -rtl = args.fileread anrufe. Stattdessen wird args.fileread selbst als Dateiname angenommen und das Tool markiert einen Fehler.

Ich bin mir sicher, dass es einen Weg gibt, in Befehlszeilenargumenten in os.system oder eine andere Funktion zu lesen (kann Unterprozeß sein – aber konnte nicht herausfinden, wie). Jede Hilfe wird geschätzt.

  • Rückgabewert von x = os.system (..) [duplizieren]
  • Rückgabewert von einem Python-Skript zu einem anderen
  • Führen Sie .jar von Python aus
  • Warum ist python nicht mehr auf os.system zu warten
  • Schreiben von Terminal-Ausgabe in Datei
  • Ossystem (alte python) und argumente mit parametern
  • Python os.system Befehl funktioniert nicht?
  • Starten Sie das lokale PHP-Skript mit dem lokalen Python-Skript
  • One Solution collect form web for “Übergeben von Argumenten in os.system”

    Verwenden Sie nicht os.system() ; subprocess ist definitiv der Weg zu gehen.

    Ihr Problem ist aber, dass Sie erwarten, dass Python zu verstehen, dass Sie args.fileread in einen String interpolieren args.fileread . So groß wie Python ist, ist es nicht in der Lage, deinen Geist so zu lesen!

    Verwenden Sie stattdessen String-Formatierung:

     os.system("rtl2gds -rtl={args.fileread} -rtl_top={args.module_name} -syn".format(args=args) 

    Wenn du einen Dateinamen an einen anderen Befehl übergeben FileType , solltest du die Option FileType nicht verwenden! Sie wollen einen Dateinamen, kein offenes Dateiprojekt:

     parser.add_argument('fileread', help='Enter the file path') 

    Verwenden Sie stattdessen os.system() anstelle von os.system() :

     import subprocess subprocess.call(['rtl2gds', '-rtl=' + args.fileread, '-rtl_top=' + args.module_name, '-syn']) 

    Wenn rtl2gds die Befehlszeilen-Parsing ordnungsgemäß implementiert, ist das = optional und Sie können stattdessen den folgenden Aufruf verwenden, um String-Verkettung zu vermeiden:

     subprocess.call(['rtl2gds', '-rtl', args.fileread, '-rtl_top', args.module_name, '-syn']) 
    Python ist die beste Programmiersprache der Welt.