Sinds os.popen
wordt vervangen door subprocess.Popen
, vroeg ik me af hoe ik zou converteren
os.popen('swfdump /tmp/filename.swf/ -d')
naar subprocess.Popen()
Ik heb het geprobeerd:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Maar ik denk dat ik dit niet goed opschrijf. Alle hulp zou op prijs worden gesteld. Bedankt
Antwoord 1, autoriteit 100%
subprocess.Popen
neemt een lijst met argumenten:
from subprocess import Popen, PIPE
process = Popen(['swfdump', '/tmp/filename.swf', '-d'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
Er is zelfs een sectie van de documentatiegewijd aan het helpen van gebruikers bij het migreren van os.popen
naar subprocess
.
Antwoord 2, autoriteit 7%
Gebruik sh, dat maakt het een stuk makkelijker:
import sh
print sh.swfdump("/tmp/filename.swf", "-d")
Antwoord 3, autoriteit 3%
In de recente Python-versie heeft subprocess
een grote verandering ondergaan. Het biedt een gloednieuwe klasse Popen
om os.popen1|2|3|4
te verwerken.
Het nieuwe subprocess.Popen()
import subprocess
subprocess.Popen('ls -la', shell=True)
zijn argumenten:
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)
Simpel gezegd, de nieuwe Popen
bevat alle functies die zijn opgesplitst in 4 afzonderlijke oude Popen
.
De oude Popen
:
Method Arguments
popen stdout
popen2 stdin, stdout
popen3 stdin, stdout, stderr
popen4 stdin, stdout and stderr
U kunt meer informatie krijgen in stapel misbruik – Robert Robinson . Bedank hem voor zijn toewijding.
Antwoord 4, Autoriteit 2%
Het is misschien niet duidelijk hoe een schaalopdracht in een reeks argumenten moet breken, vooral in complexe gevallen. shlex.split()
kan de juiste tokenizatie voor args uitvoeren (ik gebruik het voorbeeld van Blender van de oproep):
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()
https://docs.python.org/3/library/subprocess.html
Antwoord 5
Subprocess gebruiken op het gemakkelijkste manier !!
import subprocess
cmd = 'pip install numpy'.split() #replace with your command
subprocess.call(cmd)