Передача аргументов в 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 или какой-либо другой функции (может быть подпроцессом? – но не мог понять, как это сделать). Любая помощь приветствуется.

One Solution collect form web for “Передача аргументов в 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']) 
  • TypeError: должна быть строка без нулевых байтов, а не str
  • запись вывода терминала в файл
  • Как остановить другой уже запущенный скрипт в python?
  • передача нескольких переменных в os.system в python
  • Убийство скрипта, запущенного в процессе через os.system ()
  • Почему это тройное цитирующее решение исправляет ошибку пути?
  • Дать ответ yes / no в python, когда команда выполняется os.system () в python linux
  • Python, используя os.system - Есть ли способ, чтобы скрипт Python прошел мимо этого, не дожидаясь завершения вызова?
  •  
    Interesting Posts for Van-Lav

    Как проверить, является ли один шаг Atomic-операцией в python или теперь

    добавить столбец в таблицу SQLAlchemy

    В Python, как мне отлаживать с помощью интерактивной командной строки (и визуальных точек останова?)

    Вопрос Bizzarre, пытающийся сделать Rpy2 2.1.9 работать с R 2.12.1, используя Python 2.6 под Windows xp – Rpy не может найти R.dll?

    скрученный клиент http

    Переопределение urllib2.HTTPError или urllib.error.HTTPError и чтение ответа HTML в любом случае

    Python: найдите индексы * first * match между двумя массивами

    Создание модели для манекенов

    Вычисление значений пикселей из координат широты / долготы (с использованием базы данных matplotlib)

    Что такое Pythonic способ объединить две последовательности в словарь?

    Эмуляция функциональности Python `random.random ()` в C

    Добавить элемент в pandas.Series?

    Python – найти целочисленный индекс строк с NaN в пандах

    Vim скомпилирован с поддержкой Python, но не может видеть версию sys

    Передача строки в библиотеку Fortran с использованием ctypes и Python

    Python - лучший язык программирования в мире.