Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-06-11 11:14:43 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
17cb8c455076d444e6068b8ae394de3fde1e7dc1
17cb8c45
1 parent
b7d8be46
finish the research for python-subprocess
隐藏空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
25 行增加
和
27 行删除
trunk/research/python-subprocess/main.py
trunk/research/python-subprocess/main.py
查看文件 @
17cb8c4
#!/usr/bin/python
# -*- coding: utf-8 -*-
import
sys
,
shlex
,
time
,
subprocess
cmd
=
"./python.subprocess 0 800"
args
=
shlex
.
split
(
str
(
cmd
))
print
"cmd:
%
s, args:
%
s"
%
(
cmd
,
args
)
def
use_communicate
(
args
,
fout
,
ferr
):
process
=
subprocess
.
Popen
(
args
,
stdout
=
fout
,
stderr
=
ferr
)
import
sys
,
shlex
,
time
,
subprocess
cmd
=
"./python.subprocess 0 80000"
args
=
shlex
.
split
(
str
(
cmd
))
print
"cmd:
%
s, args:
%
s"
%
(
cmd
,
args
)
# the communicate will read all data and wait for sub process to quit.
def
use_communicate
(
args
,
fout
,
ferr
):
process
=
subprocess
.
Popen
(
args
,
stdout
=
fout
,
stderr
=
ferr
)
(
stdout_str
,
stderr_str
)
=
process
.
communicate
()
return
(
stdout_str
,
stderr_str
)
# if use subprocess.PIPE, the pipe will full about 50KB data,
# and sub process will blocked, then timeout will kill it.
def
use_poll
(
args
,
fout
,
ferr
,
timeout
):
(
stdout_str
,
stderr_str
)
=
(
None
,
None
)
process
=
subprocess
.
Popen
(
args
,
stdout
=
fout
,
stderr
=
ferr
)
...
...
@@ -28,27 +31,22 @@ def use_poll(args, fout, ferr, timeout):
time
.
sleep
(
1
)
process
.
wait
()
return
(
stdout_str
,
stderr_str
)
def
use_communicate_timeout
(
args
,
fout
,
ferr
,
timeout
):
(
stdout_str
,
stderr_str
)
=
(
None
,
None
)
process
=
subprocess
.
Popen
(
args
,
stdout
=
fout
,
stderr
=
ferr
)
starttime
=
time
.
time
()
while
True
:
fnull
=
open
(
"/dev/null"
,
"rw"
)
fout
=
subprocess
.
PIPE
#fnull.fileno()
ferr
=
subprocess
.
PIPE
#fnull#fnull.fileno()
print
"fout=
%
s, ferr=
%
s"
%
(
fout
,
ferr
)
# stdout/stderr can be fd, fileobject, subprocess.PIPE, None
fnull
=
open
(
"/dev/null"
,
"rw"
)
fout
=
fnull
.
fileno
()
#subprocess.PIPE#fnull#fnull.fileno()
ferr
=
fnull
.
fileno
()
#subprocess.PIPE#fnull#fnull.fileno()
print
"fout=
%
s, ferr=
%
s"
%
(
fout
,
ferr
)
#(stdout_str, stderr_str) = use_communicate(args, fout, ferr)
#(stdout_str, stderr_str) = use_poll(args, fout, ferr, 10)
(
stdout_str
,
stderr_str
)
=
use_communicate_timeout
(
args
,
fout
,
ferr
,
10
)
(
stdout_str
,
stderr_str
)
=
use_poll
(
args
,
fout
,
ferr
,
10
)
def
print_result
(
stdout_str
,
stderr_str
):
if
stdout_str
is
None
:
stdout_str
=
""
if
stderr_str
is
None
:
stderr_str
=
""
def
print_result
(
stdout_str
,
stderr_str
):
if
stdout_str
is
None
:
stdout_str
=
""
if
stderr_str
is
None
:
stderr_str
=
""
print
"terminated, size of stdout=
%
s, stderr=
%
s"
%
(
len
(
stdout_str
),
len
(
stderr_str
))
while
True
:
time
.
sleep
(
1
)
while
True
:
time
.
sleep
(
1
)
print_result
(
stdout_str
,
stderr_str
)
...
...
请
注册
或
登录
后发表评论