Jak używać podprocesu popen Python
Ponieważ {[2] } jest zastępowane przez subprocess.popen
, zastanawiałem się, jak przekonwertować
os.popen('swfdump /tmp/filename.swf/ -d')
Do 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 chyba źle to wypisuję. Każda pomoc będzie mile widziana. Dzięki 5 answers
subprocess.Popen
pobiera listę argumentów:
from subprocess import Popen, PIPE
process = Popen(['swfdump', '/tmp/filename.swf', '-d'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
Istnieje nawet sekcja dokumentacji poświęcona pomocy użytkownikom w migracji z os.popen
do subprocess
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-11 17:12:52
Użyj sh , to znacznie ułatwi sprawę:
import sh
print sh.swfdump("/tmp/filename.swf", "-d")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 04:14:44
W najnowszej wersji Pythona, subprocess
ma dużą zmianę. Oferuje zupełnie nową klasę {[4] } do obsługi os.popen1|2|3|4
.
NOWY subprocess.Popen()
import subprocess
subprocess.Popen('ls -la', shell=True)
Jego argumenty:
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)
Mówiąc najprościej, Nowy Popen
zawiera wszystkie funkcje, które zostały podzielone na 4 oddzielne stare popen
.
Stary popen
:
Method Arguments
popen stdout
popen2 stdin, stdout
popen3 stdin, stdout, stderr
popen4 stdin, stdout and stderr
Możesz uzyskać więcej informacji w Stack Abuse-Robert Robinson. Podziękuj Mu za oddanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-31 12:03:53
Może nie być oczywiste, jak podzielić polecenie powłoki na sekwencję argumentów, szczególnie w złożonych przypadkach. shlex.split()
może wykonać poprawną tokenizację dla args (używam przykładu wywołania blendera):
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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-05 17:19:56
Używanie Podprocesu w najprostszy sposób!!
import subprocess
cmd = 'pip install numpy'.split() #replace with your command
subprocess.call(cmd)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-06 03:00:12