mirror of https://github.com/ossrs/srs.git
add research for usage for subprocess
parent
cccc483ab3
commit
b7d8be46a1
@ -0,0 +1,54 @@
|
||||
#!/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)
|
||||
(stdout_str, stderr_str) = process.communicate()
|
||||
return (stdout_str, stderr_str)
|
||||
|
||||
def use_poll(args, fout, ferr, timeout):
|
||||
(stdout_str, stderr_str) = (None, None)
|
||||
process = subprocess.Popen(args, stdout=fout, stderr=ferr)
|
||||
starttime = time.time()
|
||||
while True:
|
||||
process.poll()
|
||||
if process.returncode is not None:
|
||||
(stdout_str, stderr_str) = process.communicate()
|
||||
break
|
||||
if timeout > 0 and time.time() - starttime >= timeout:
|
||||
print "timeout, kill process. timeout=%s"%(timeout)
|
||||
process.kill()
|
||||
break
|
||||
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_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)
|
||||
|
||||
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)
|
||||
|
||||
print_result(stdout_str, stderr_str)
|
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
# always to print to stdout and stderr.
|
||||
g++ python.subprocess.cpp -o python.subprocess
|
||||
*/
|
||||
int main(int argc, char** argv) {
|
||||
if (argc <= 2) {
|
||||
printf("Usage: <%s> <interval_ms> <max_loop>\n"
|
||||
" %s 50 100000\n", argv[0], argv[0]);
|
||||
exit(-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int interval_ms = ::atoi(argv[1]);
|
||||
int max_loop = ::atoi(argv[2]);
|
||||
printf("always to print to stdout and stderr.\n");
|
||||
printf("interval: %d ms\n", interval_ms);
|
||||
printf("max_loop: %d\n", max_loop);
|
||||
|
||||
for (int i = 0; i < max_loop; i++) {
|
||||
fprintf(stdout, "always to print to stdout and stderr. interval=%dms, max=%d, current=%d\n", interval_ms, max_loop, i);
|
||||
fprintf(stderr, "always to print to stdout and stderr. interval=%dms, max=%d, current=%d\n", interval_ms, max_loop, i);
|
||||
if (interval_ms > 0) {
|
||||
usleep(interval_ms * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue