本文整理汇总了Python中subprocess.Popen.get_stdout_pipe方法的典型用法代码示例。如果您正苦于以下问题:Python Popen.get_stdout_pipe方法的具体用法?Python Popen.get_stdout_pipe怎么用?Python Popen.get_stdout_pipe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类subprocess.Popen
的用法示例。
在下文中一共展示了Popen.get_stdout_pipe方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: DaemonProcess
# 需要导入模块: from subprocess import Popen [as 别名]
# 或者: from subprocess.Popen import get_stdout_pipe [as 别名]
class DaemonProcess(GObject.GObject):
__gsignals__ = {
# line(text) - emited when process outputs full line
b"line" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
# exit(code) - emited when process exits
b"exit" : (GObject.SIGNAL_RUN_FIRST, None, (int,)),
# failed(exception) - emited if process fails to start
b"failed" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
}
SCROLLBACK_SIZE = 500 # Maximum number of output lines stored in memory
def __init__(self, commandline):
""" commandline should be list of arguments """
GObject.GObject.__init__(self)
self.commandline = commandline
self._proc = None
def start(self):
os.environ["STNORESTART"] = "1" # see syncthing --help
os.environ["STNOUPGRADE"] = "1" # hopefully implemented later
try:
self._cancel = Gio.Cancellable()
if IS_WINDOWS:
# Windows
sinfo = STARTUPINFO()
sinfo.dwFlags = STARTF_USESHOWWINDOW
sinfo.wShowWindow = 0
self._proc = Popen(self.commandline,
stdin=PIPE, stdout=PIPE, stderr=PIPE,
startupinfo=sinfo)
self._stdout = WinPopenReader(self._proc)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
elif HAS_SUBPROCESS:
# New Gio
flags = Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_MERGE
self._proc = Gio.Subprocess.new(self.commandline, flags)
self._proc.wait_check_async(None, self._cb_finished)
self._stdout = self._proc.get_stdout_pipe()
else:
# Gio < 3.12 - Gio.Subprocess is missing :(
self._proc = Popen(self.commandline, stdout=PIPE)
self._stdout = Gio.UnixInputStream.new(self._proc.stdout.fileno(), False)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
except Exception, e:
# Startup failed
self.emit("failed", e)
return
self._lines = deque([], DaemonProcess.SCROLLBACK_SIZE)
self._buffer = ""
self._stdout.read_bytes_async(256, 0, self._cancel, self._cb_read, ())
示例2: DaemonProcess
# 需要导入模块: from subprocess import Popen [as 别名]
# 或者: from subprocess.Popen import get_stdout_pipe [as 别名]
class DaemonProcess(GObject.GObject):
__gsignals__ = {
# line(text) - emited when process outputs full line
b"line" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
# exit(code) - emited when process exits
b"exit" : (GObject.SIGNAL_RUN_FIRST, None, (int,)),
# failed(exception) - emited if process fails to start
b"failed" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
}
SCROLLBACK_SIZE = 500 # Maximum number of output lines stored in memory
PRIORITY_LOWEST = 19
PRIORITY_LOW = 10
PRIORITY_NORMAL = 0
PRIORITY_HIGH = -10
PRIORITY_HIGHEST = -20
def __init__(self, cmdline, priority=PRIORITY_NORMAL, max_cpus=0, env={}):
""" cmdline should be list of arguments """
GObject.GObject.__init__(self)
self.cmdline = cmdline
self.priority = priority
self.env = { x:env[x] for x in env }
self.env["STNORESTART"] = "1" # see syncthing --help
self.env["STNOUPGRADE"] = "1"
if max_cpus > 0:
self.env["GOMAXPROCS"] = str(max_cpus)
self._proc = None
def start(self):
for x in self.env:
os.environ[x] = self.env[x]
try:
self._cancel = Gio.Cancellable()
if IS_WINDOWS:
# Windows
sinfo = STARTUPINFO()
sinfo.dwFlags = STARTF_USESHOWWINDOW
sinfo.wShowWindow = 0
cflags = nice_to_priority_class(self.priority)
self._proc = Popen(self.cmdline,
stdin=PIPE, stdout=PIPE, stderr=PIPE,
startupinfo=sinfo, creationflags=cflags)
self._stdout = WinPopenReader(self._proc.stdout)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
elif HAS_SUBPROCESS:
# New Gio
flags = Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_MERGE
if self.priority == 0:
self._proc = Gio.Subprocess.new(self.cmdline, flags)
else:
# I just really do hope that there is no distro w/out nice command
self._proc = Gio.Subprocess.new([ "nice", "-n", "%s" % self.priority ] + self.cmdline, flags)
self._proc.wait_check_async(None, self._cb_finished)
self._stdout = self._proc.get_stdout_pipe()
else:
# Gio < 3.12 - Gio.Subprocess is missing :(
if self.priority == 0:
self._proc = Popen(self.cmdline, stdout=PIPE)
else:
# still hoping
self._proc = Popen([ "nice", "-n", "%s" % self.priority ], stdout=PIPE)
self._stdout = Gio.UnixInputStream.new(self._proc.stdout.fileno(), False)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
except Exception, e:
# Startup failed
self.emit("failed", e)
return
self._lines = deque([], DaemonProcess.SCROLLBACK_SIZE)
self._buffer = ""
self._stdout.read_bytes_async(256, 0, self._cancel, self._cb_read, ())
示例3: DaemonProcess
# 需要导入模块: from subprocess import Popen [as 别名]
# 或者: from subprocess.Popen import get_stdout_pipe [as 别名]
class DaemonProcess(GObject.GObject):
__gsignals__ = {
# line(text) - emitted when process outputs full line
b"line" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
# exit(code) - emitted when process exits
b"exit" : (GObject.SIGNAL_RUN_FIRST, None, (int,)),
# failed(exception) - emitted if process fails to start
b"failed" : (GObject.SIGNAL_RUN_FIRST, None, (object,)),
}
SCROLLBACK_SIZE = 500 # Maximum number of output lines stored in memory
PRIORITY_LOWEST = 19
PRIORITY_LOW = 10
PRIORITY_NORMAL = 0
PRIORITY_HIGH = -10
PRIORITY_HIGHEST = -20
def __init__(self, cmdline, priority=PRIORITY_NORMAL, max_cpus=0, env={}):
""" cmdline should be list of arguments """
GObject.GObject.__init__(self)
self.cmdline = cmdline
self.priority = priority
self.env = { x:env[x] for x in env }
self.env["STNORESTART"] = "1" # see syncthing --help
self.env["STNOUPGRADE"] = "1"
if max_cpus > 0:
self.env["GOMAXPROCS"] = str(max_cpus)
self._proc = None
def start(self):
for x in self.env:
os.environ[x] = self.env[x]
try:
self._cancel = Gio.Cancellable()
if IS_WINDOWS:
# Windows
sinfo = STARTUPINFO()
sinfo.dwFlags = STARTF_USESHOWWINDOW
sinfo.wShowWindow = 0
cflags = nice_to_priority_class(self.priority)
self._proc = Popen(self.cmdline,
stdin=PIPE, stdout=PIPE, stderr=PIPE,
startupinfo=sinfo, creationflags=cflags)
self._stdout = WinPopenReader(self._proc.stdout)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
elif HAS_SUBPROCESS:
# New Gio
flags = Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_MERGE
if self.priority == 0:
self._proc = Gio.Subprocess.new(self.cmdline, flags)
else:
# I just really do hope that there is no distro w/out nice command
self._proc = Gio.Subprocess.new([ "nice", "-n", "%s" % self.priority ] + self.cmdline, flags)
self._proc.wait_check_async(None, self._cb_finished)
self._stdout = self._proc.get_stdout_pipe()
else:
# Gio < 3.12 - Gio.Subprocess is missing :(
if self.priority == 0:
self._proc = Popen(self.cmdline, stdout=PIPE)
else:
# still hoping
self._proc = Popen([ "nice", "-n", "%s" % self.priority ], stdout=PIPE)
self._stdout = Gio.UnixInputStream.new(self._proc.stdout.fileno(), False)
self._check = GLib.timeout_add_seconds(1, self._cb_check_alive)
except Exception as e:
# Startup failed
self.emit("failed", e)
return
self._lines = deque([], DaemonProcess.SCROLLBACK_SIZE)
self._buffer = ""
self._stdout.read_bytes_async(256, 0, self._cancel, self._cb_read, ())
def _cb_read(self, pipe, results, *a):
""" Handler for read_bytes_async """
try:
response = pipe.read_bytes_finish(results)
except Exception as e:
if not self._cancel.is_cancelled():
log.exception(e)
GLib.idle_add(pipe.read_bytes_async, 256, 1, None, self._cb_read)
return
response = response.get_data().decode('utf-8')
self._buffer = "%s%s" % (self._buffer, response)
while "\n" in self._buffer:
line, self._buffer = self._buffer.split("\n", 1)
self._lines.append(line)
self.emit('line', line)
if not self._cancel.is_cancelled():
GLib.idle_add(pipe.read_bytes_async, 256, 1, None, self._cb_read, ())
def _cb_check_alive(self, *a):
"""
Repeatedly check if process is still alive.
Called only on windows
"""
if self._proc == None:
# Never started or killed really fast
self.emit('exit', 1)
self._cancel.cancel()
if IS_WINDOWS: self._stdout.close()
return False
#.........这里部分代码省略.........