V2EX ouiki
 ouiki 最近的时间轴更新
ouiki

ouiki

V2EX 第 250730 号会员,加入于 2017-08-25 11:04:59 +08:00
ouiki 最近回复了
2017-08-29 09:07:27 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@guyskk 感谢,那篇文章让我受益良多。
2017-08-29 09:06:52 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@araraloren 再次感谢。
客户那边限制,只能使用 win。

>>> 不过还有一个办法就是你去和 cmd/shell 交互,而不是和你的应用程序交互
这是个思路。
2017-08-28 15:56:49 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@araraloren 谢谢,按你说的确实是有输出。赞啊~~

接下来就是我的问题了,我以为用 mysql,大家都有这个环境,就能很好的说明这个问题。看来大能果然不能糊弄。
我实际的问题和 mysql 类似,是叫“ cisco anyConnect ” 的一个程序( vpncli.exe )。
流程是差不多,通过 vpncli.exe 登录建立 VPN 连接返回状态访问测试页面退出 vpncli.exe 。
所以 mysql -n 参数我是学到了,但 vpncli.exe 没有-n 参数。
2017-08-28 15:18:37 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
感谢大家一直在帮助我,怎奈我天资有限,一直没有解决。
@llbgurs out,err = sub_process.communicate()的意思是线程结束后才返回 stdout 和 stderr 吧?
我的程序不能停止后才返回,还有后续的动作。
2017-08-28 14:59:33 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@topbandit 大神留步。
我改了一下我的代码。试了,不打印。求大神给看看。

def stdout_theard(stdout_lock, p_stdout):
for i in range(3000):
s = p_stdout.readline()
if len(s)>0:
print s # 这里没有打印
time.sleep(0.01)

if __name__ == "__main__":
os.chdir('C:\\Program Files (x86)\\MySQL\\MySQL Server 5.0\\bin')
s_mian_command = 'mysql -h localhost -uroot -p1234'
l_command = ['show databases;', 'use mysql;', 'show tables;']

sub_process = subprocess.Popen(s_mian_command,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell = True)

stdout_lock = threading.Lock()
thread_read_output = threading.Thread(target=stdout_theard,
args=(stdout_lock,sub_process.stdout))
thread_read_output.setDaemon('True')
thread_read_output.start()

for s_command in l_command:
time.sleep(1)
sub_process.stdin.write(s_command + '\r\n')
print s_command # 这里是打印的

打印的结果就是:
show databases;
use mysql;
show tables;

密码啥的都没问题。后台也确确实实执行了的(我用 PowerCmd 能看到后台是执行了的),就是没打印。
黑人问号黑人问号。
2017-08-28 11:05:13 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@topbandit stdout,stderr = Pipe.commucate() 是不是等到进程结束才输出?这个在我的程序里不适用。不能等到结束,还要有后续的动作。(事实上是用 cisco anyConnect 建立连接之后,测试上网)
2017-08-28 11:02:42 +08:00
回复了 ouiki 创建的主题 Python a href="/t/386235#reply26">[求助] subprocess 的 stdout 堵塞问题
@topbandit 所谓“及时取出 stdout,边读边写”,的意思是 p.stdout.flush() 么?
好像抓到点什么了?
2017-08-28 11:01:44 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
@araraloren 谢谢回复,学到了。
2017-08-28 10:30:45 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
因为 python 的 subprocess 的 stdin,stdout 有阻塞的问题,所以我不会处理。
perl 没有阻塞的问题么?这到是个好消息,我可以用 perl 试试。
2017-08-28 10:08:51 +08:00
回复了 ouiki 创建的主题 Python [求助] subprocess 的 stdout 堵塞问题
放到线程里仍旧是阻塞。
重定向到文件里,写不进去。文件总是空,只有强制退出( Ctrl+C )后,才能写到文件里,看来也是阻塞的问题。

大牛,或者说有没有成功的经验。很可能我的写法也有问题。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5852 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 13ms UTC 02:02 PVG 10:02 LAX 18:02 JFK 21:02
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86