Как мне создать подпроцесс в Python? - PullRequest
4 голосов
/ 20 декабря 2010

Я хотел бы создать подпроцесс процесса.

Какой рабочий пример показывает, как этого добиться?

Ответы [ 6 ]

6 голосов
/ 20 декабря 2010

Начните с документации подпроцесса .

Если вы хотите получить вывод:

>>> import subprocess
>>> output = subprocess.Popen(['uname', '-a'], stdout=subprocess.PIPE).communicate()[0]
>>> output
'Linux'

Если вы просто хотите позвонить, а не иметь дело с выводом:

>>> subprocess.call(['echo', 'Hi'])
Hi
0

subprocess.check_call то же самое, за исключением того, что выдает CalledProcessError в случае, если команда вызывается с недопустимыми параметрами.

A хороший учебник по подпроцессам .

1 голос
/ 19 ноября 2018

Это то, что сработало для меня, если вы хотите запустить простую команду вместо того, чтобы давать отдельный файл

import subprocess
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.wait()
print process.returncode

Для получения кода возврата процесса вы можете использовать process.returncode Для получения ответа вы можете использовать process.communicate()

В случае, если вы не уверены, вы можете просто протестировать этот код, используя command="ls"

если вы получаете returncode, отличный от 0, вы можете проверить здесь, что означает этот код ошибки: http://tldp.org/LDP/abs/html/exitcodes.html

Подробнее о подпроцессе: http://docs.python.org/library/subprocess.html

1 голос
/ 05 января 2012

Запуск и мониторинг подпроцесса:

import subprocess, time, os, signal
args=['/usr/bin/vmstat','-n','2']
app=subprocess.Popen(args=args, stdout=open('somefile','w'))
print "Your app's PID is %s. You can now process data..." % app.pid
time.sleep(5)
if app.poll() == None: print "Process is still running after 5s."
print "The app outputed %s bytes." % len(open('somefile','r').read())
print "Stopping the process..."
os.kill(app.pid, signal.SIGTERM)

Это еще не все.Просто проверьте Popen документы.

1 голос
/ 20 декабря 2010
import subprocess

subprocess.call(['echo', 'hello world'])
0 голосов
/ 14 июня 2019

Основываясь на ответе пользователя user225312, я подготовил следующий вкладыш, который может помочь вам протестировать подпроцесс:

python -c "import subprocess;
output = subprocess.Popen(['uname', '-a'], stdout=subprocess.PIPE).communicate()[0]; 
print output"

результат как: Linux xxx.xxx.xxx.xxx 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

0 голосов
/ 19 сентября 2013
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
subprocess.call(os.popen(tempFileName), shell=True)
os.remove(tempFileName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...