Передача аргументов в os.system

Мне нужно выполнить следующую команду через python. rtl2gds – это инструмент, который читает 2 параметра: путь к файлу и имя модуля

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

Я читаю путь к имени файла и модуля от пользователя через argparse, как показано ниже:

 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") 

Но путь к файлу, который считывается в args.fileread, не попадает в os.system, когда я вызываю -rtl = args.fileread. Вместо этого, args.fileread сам принимается за имя файла, а инструмент выдает ошибку.

Я уверен, что есть способ прочитать аргументы командной строки в os.system или какой-либо другой функции (может быть подпроцессом? – но не мог понять, как это сделать). Любая помощь приветствуется.

Не используйте os.system() ; subprocess – это, безусловно, путь.

Ваша проблема заключается в том, что вы ожидаете, что Python поймет, что вы хотите интерполировать args.fileread в строку. Так же хорошо, как Python, он не способен читать ваш ум так!

Вместо этого используйте форматирование строк:

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

Если вы хотите передать имя файла другой команде, вам не следует использовать параметр типа FileType ! Вы хотите имя файла, а не открытый файл:

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

Но используйте subprocess.call() вместо os.system() :

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

Если rtl2gds выполняет синтаксический анализ командной строки, параметр = является необязательным, и вместо этого вы можете использовать следующий вызов, избегая конкатенации строк:

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