Оболочка не знает о переменных Python, так как это совершенно другая система.Таким образом, вы не можете использовать механизм подстановки переменных оболочки ($date_ID
).Вместо этого вам нужно будет передать их в виде строки Python:
os.system("import_S1_TOPS_modified %s %s vv 1" % (date_ID, fullpath))
Обратите внимание, что у этого кода есть серьезная проблема: что, если кто-то выдаст ; rm -rf /;
как filename
?команда теперь будет выглядеть так:
import_S1_TOPS_modified 20181021; rm -rf /; vv 1
, которая удалит все.
Вот почему лучше использовать subprocess
, который вообще не будет использовать оболочку,и не подвержен подобным проблемам:
subprocess.call(['import_S1_TOPS_modified', date_ID, fullpath, 'vv', '1'])
Если вам нужно использовать оболочку, используйте shlex.quote()
и добавьте shell=True
:
subprocess.call("import_S1_TOPS_modified %s %s vv 1" % (
shlex.quote(date_ID), shlex.quote(fullpath)),
shell=True)