Поскольку os.popen заменяется на subprocess.popen, мне было интересно, как бы я преобразовал
os.popen('swfdump /tmp/filename.swf/ -d')
в subprocess.popen ()
Я попытался:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Но, наверное, я неправильно это записываю. Любая помощь будет оценена. Спасибо
python
subprocess
popen
Глупый.Жирный.Кошачий
источник
источник
Ответы:
subprocess.Popen
принимает список аргументов:Там даже раздел документации , посвященной помогая пользователям мигрировать из
os.popen
кsubprocess
.источник
shell=True
это не рекомендуется.filename.swf; rm -rf /
значение имени файла. Однако это проблема только тогда, когда содержимое вашего аргумента Popen небезопасно.shell=True
кроме случаев использования ненадежного ввода. Простое заявление о том, чтоshell=True
это не рекомендуется, вводит в заблуждение.shell=True
, но любой случайный пользователь, наткнувшийся на этот вопрос, может не знать . Вот почему я считаю важным подчеркнуть, чтоshell=True
на самом деле это не рекомендуется, если вы точно не знаете, что делаете.shutil.rmtree
например. Но это не имеет никакого отношения к тому, включены они в stdlib или нет. Я считаю, что философия UNIX: «Unix не создавался для того, чтобы помешать своим пользователям делать глупые вещи, поскольку это также помешало бы им делать умные вещи». также в значительной степени относится к Python.Используйте sh , это значительно упростит задачу:
источник
Использование подпроцесса самым простым способом !!
источник