- 论坛徽章:
- 0
|
要求是这样的:
1) 登入mysql服务器(mysql -h localhost -uroot -p1234)。
2) 输入mysql内部命令show databases,如果返回的内容出现mysql(存在mysql DB)就立刻强制退出整个python程序。
(关于要求2的解释,假如show databases的返回内容是information_schema \r\n mysql \r\n test。不要等到test出现,马上就退出或者杀死该程序)
我认为只有用subprocess能够比较好的完成以上功能,所以以下都是以使用subprocess为前提。
个人试了好多方法,都不成功。
方法1:把stdout放到线程里
- def stdout_theard(p_stdout):
- time.sleep(0.01)
- for i in range(3000):
- print p_stdout.readline()
- s_command = 'mysql -h localhost -uroot -p1234'
- sub_process = subprocess.Popen(command , stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
- thread_read_output = threading.Thread(target=stdout_theard, args=(sub_process.stdout,))
- thread_read_output.setDaemon('True')
- thread_read_output.start()
- sub_process.stdin.write('show databases;\r\n')
复制代码
方法2:把stdout重定向到文件里
- s_command = 'mysql -h localhost -uroot -p1234'
- f_out = tempfile.TemporaryFile(mode='w+')
- f_err = tempfile.TemporaryFile(mode='w+')
- sub_process = subprocess.Popen(command , stdin = subprocess.PIPE, stdout = f_out, stderr = f_err, shell = True)
复制代码 或者:
- os.dup2(sub_process.stdout.fileno(), f_out.fileno())
复制代码
以上方法都没成功。
希望前辈高手们指点。
|
|