亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: [求助]subprocess的stdout堵塞問題 [打印本頁]

作者: ouiki    時(shí)間: 2017-08-25 11:03
標(biāo)題: [求助]subprocess的stdout堵塞問題
要求是這樣的:
1) 登入mysql服務(wù)器(mysql -h localhost -uroot -p1234)。
2) 輸入mysql內(nèi)部命令show databases,如果返回的內(nèi)容出現(xiàn)mysql(存在mysql DB)就立刻強(qiáng)制退出整個(gè)python程序。
(關(guān)于要求2的解釋,假如show databases的返回內(nèi)容是information_schema \r\n mysql \r\n test。不要等到test出現(xiàn),馬上就退出或者殺死該程序)

我認(rèn)為只有用subprocess能夠比較好的完成以上功能,所以以下都是以使用subprocess為前提。

個(gè)人試了好多方法,都不成功。
方法1:把stdout放到線程里

  1.     def stdout_theard(p_stdout):
  2.         time.sleep(0.01)
  3.         for i in range(3000):
  4.             print p_stdout.readline()

  5.     s_command = 'mysql -h localhost -uroot -p1234'
  6.     sub_process = subprocess.Popen(command , stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
  7.     thread_read_output = threading.Thread(target=stdout_theard, args=(sub_process.stdout,))
  8.     thread_read_output.setDaemon('True')
  9.     thread_read_output.start()

  10.     sub_process.stdin.write('show databases;\r\n')
復(fù)制代碼

方法2:把stdout重定向到文件里

  1.     s_command = 'mysql -h localhost -uroot -p1234'
  2.     f_out = tempfile.TemporaryFile(mode='w+')
  3.     f_err = tempfile.TemporaryFile(mode='w+')
  4.     sub_process = subprocess.Popen(command , stdin = subprocess.PIPE, stdout = f_out, stderr = f_err, shell = True)
復(fù)制代碼
或者:   
  1. os.dup2(sub_process.stdout.fileno(), f_out.fileno())
復(fù)制代碼

以上方法都沒成功。
希望前輩高手們指點(diǎn)。

作者: 423497786    時(shí)間: 2017-08-25 16:57
我知道怎么解決,但是我就不告訴你
作者: q1208c    時(shí)間: 2017-08-25 23:29
回復(fù) 1# ouiki

不知道樓主能否換個(gè)思路?

我實(shí)在沒搞懂,為啥非要在中間停下來?

我更沒搞懂的是為啥要用shell去執(zhí)行, 而不是直接用 python 的 mysqldb 來執(zhí)行 ?

作者: ouiki    時(shí)間: 2017-08-28 08:18
本帖最后由 ouiki 于 2017-08-28 08:26 編輯
q1208c 發(fā)表于 2017-08-25 23:29
回復(fù) 1# ouiki

不知道樓主能否換個(gè)思路?

我是打了個(gè)比方,具體不太好說。
必須得調(diào)用一個(gè)exe(Cisco AnyConnect),得到返回值。但登陸這個(gè)exe的時(shí)候,一旦給定的用戶名密碼錯(cuò)誤,它會(huì)一直用這組錯(cuò)誤的用戶名密碼試,直到該用戶被鎖死。
退出的原因就是,在第一次用戶名密碼錯(cuò)誤時(shí),就退出,避免exe反復(fù)試,導(dǎo)致鎖死。
不知道說明白沒。



作者: ouiki    時(shí)間: 2017-08-28 08:21
423497786 發(fā)表于 2017-08-25 16:57
我知道怎么解決,但是我就不告訴你



作者: q1208c    時(shí)間: 2017-08-28 20:41
回復(fù) 4# ouiki

調(diào)用的時(shí)候,應(yīng)該可以找到辦法限制它重試的次數(shù)吧?

如果不行, 可能要換個(gè)辦法了,subprocess 是有 cache的,
等你看到的時(shí)候,那邊的執(zhí)行都結(jié)束了。

或許可以試試 pyexpect 。也許能管用。

作者: ouiki    時(shí)間: 2017-08-29 09:12
q1208c 發(fā)表于 2017-08-28 20:41
回復(fù) 4# ouiki

調(diào)用的時(shí)候,應(yīng)該可以找到辦法限制它重試的次數(shù)吧?

那個(gè)exe本身支持的參數(shù)不多,我沒找到限制次數(shù)的參數(shù)。

pyexpect 是個(gè)好思路,我試試看。
謝謝回復(fù)。


作者: q1208c    時(shí)間: 2017-08-29 21:14
回復(fù) 4# ouiki

我忽然想起來了,你這是要試人家的密碼么?




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2