Since os.popen
is being replaced by subprocess.popen
, I was wondering how would I convert
os.popen('swfdump /tmp/filename.swf/ -d')
to subprocess.popen()
I tried:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
But I guess I'm not properly writing this out. Any help would be appreciated. Thanks
This question is related to
python
subprocess
popen
In the recent Python version, subprocess
has a big change. It offers a brand-new class Popen
to handle os.popen1|2|3|4
.
The new subprocess.Popen()
import subprocess
subprocess.Popen('ls -la', shell=True)
Its arguments:
subprocess.Popen(args,
bufsize=0,
executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False,
shell=False,
cwd=None, env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
Simply put, the new Popen
includes all the features which were split into 4 separate old popen
.
The old popen
:
Method Arguments
popen stdout
popen2 stdin, stdout
popen3 stdin, stdout, stderr
popen4 stdin, stdout and stderr
You could get more information in Stack Abuse - Robert Robinson. Thank him for his devotion.
Using Subprocess in easiest way!!
import subprocess
cmd = 'pip install numpy'.split() #replace with your command
subprocess.call(cmd)
Use sh, it'll make things a lot easier:
import sh
print sh.swfdump("/tmp/filename.swf", "-d")
It may not be obvious how to break a shell command into a sequence of arguments, especially in complex cases. shlex.split()
can do the correct tokenization for args (I'm using Blender's example of the call):
import shlex
from subprocess import Popen, PIPE
command = shlex.split('swfdump /tmp/filename.swf/ -d')
process = Popen(command, stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
Source: Stackoverflow.com