повторный запуск одной и той же команды с разными параметрами

#linux #parameters

#linux #параметры

Вопрос:

привет, я новичок в Linux. Это команда, которую я хочу запустить с разными параметрами:

 '$GEM5/build/ARM/gem5.opt --outdir="Outputs" hw4config.py -c $GEM5/../test_progs/daxpy/daxpy_arm_big --cpu-type="DerivO3CPU" --caches --#l2cache --num_phys_float_regs=phys --num_rob_entries=rob --num_iq_entries=iq'
 

И я хочу, чтобы параметры ‘phys’, ‘rob’ и ‘iq’ изменялись с размером шага в квадрате.
Это мой скрипт на python:

 import os
phys = 256
rob = 4
iq = 4
i = 1
while phys <= 4096:
    rob = 4
    while rob <= 256:
     iq = 4
     while iq <= 256:
         cmd = '$GEM5/build/ARM/gem5.opt --outdir="Outputs" hw4config.py -c $GEM5/../test_progs/daxpy/daxpy_arm_big --cpu-type="DerivO3CPU" --caches --#l2cache --num_phys_float_regs=phys --num_rob_entries=rob --num_iq_entries=iq'
         os.system(cmd)
         iq *= 2
         i  = 1
     rob *= 2
    phys *= 2
 

Когда я запускаю этот файл python в терминале, появляется invalid integer value 'phys' ошибка.
Затем я меняю эти параметры ‘phys’, ‘rob’, ‘iq’ в командной строке выше непосредственно на числа, ошибки нет.
Как я могу это исправить?

Комментарии:

1. проверьте свою команду — вы поместили туда литералы «phys», «iq» и «rob», а не их фактические значения. Например, --num_rob_entries=rob следует заменить на --num_rob_entries=',rob,' . Те же замены должны быть сделаны для двух других переменных.

Ответ №1:

Хм… Как вы думаете, как Python может разработать то, что вы имеете в виду?

В вашем cmd = ... заявлении нет замены.

Если ваш Python достаточно свежий (3.5 ), вы можете использовать очень похожую строку:

 cmd = f'$GEM5/build/ARM/gem5.opt --outdir="Outputs" hw4config.py -c $GEM5/../test_progs/daxpy/daxpy_arm_big --cpu-type="DerivO3CPU" --caches --#l2cache --num_phys_float_regs={phys} --num_rob_entries={rob} --num_iq_entries={iq}'
 

в противном случае вам придется прибегнуть к другим методам форматирования.

Ваша строка, как есть, попытается передать параметр «—num_phys_float_regs = phys» (буквально), и ваша программа справедливо жалуется, что «phys» не является целочисленным значением.

Комментарии:

1. Спасибо! Проблема была решена вашим методом!

2. @Sukey: если проблема была решена, вы должны принять ответ.