Ponieważ os.popen jest zastępowane przez subprocess.popen, zastanawiałem się, jak skonwertować
os.popen('swfdump /tmp/filename.swf/ -d')
to subprocess.popen ()
Próbowałem:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Ale myślę, że nie piszę tego poprawnie. Każda pomoc będzie mile widziana. Dzięki
python
subprocess
popen
Stupid.Fat.Cat
źródło
źródło
Odpowiedzi:
subprocess.Popen
pobiera listę argumentów:Jest nawet sekcja dokumentacji poświęcona pomocy użytkownikom w migracji z
os.popen
dosubprocess
.źródło
shell=True
jest zalecane.filename.swf; rm -rf /
wartość nazwy pliku. Jest to jednak problem tylko wtedy, gdy treść argumentu do Popena jest niepewna.shell=True
z wyjątkiem korzystania z niezaufanych danych wejściowych. Samo stwierdzenie, żeshell=True
nie jest to zalecane, jest mylące.shell=True
, ale każdy przypadkowy użytkownik, który natknie się na to pytanie, może nie być. Dlatego uważam, że ważne jest, aby podkreślić, żeshell=True
w rzeczywistości nie jest to zalecane, chyba że dokładnie wiesz, co robisz.shutil.rmtree
na przykład. Ale to nie ma nic wspólnego z tym, czy są one zawarte w standardowej bibliotece, czy nie. Uważam, że filozofia Uniksa „Uniksa nie została zaprojektowana, aby powstrzymać użytkowników przed robieniem głupich rzeczy, ponieważ powstrzymałoby to ich również przed robieniem sprytnych rzeczy”. ma również zastosowanie w dużych częściach do Pythona.Użyj sh , to znacznie ułatwi:
źródło
Korzystanie z Subprocess w najprostszy sposób !!
źródło