[Python]使用socket方式连接vlc提示connect refuse

Python/PHP/Perl 开发与设计
回复
头像
skydark
帖子: 24
注册时间: 2009-03-31 8:12
送出感谢: 0
接收感谢: 1 次

[Python]使用socket方式连接vlc提示connect refuse

#1

帖子 skydark » 2010-12-07 0:42

最近正在尝试用python写一个小东西,其中一部分考虑到需要启动vlc(不能假定它可以替换为mplayer)并手动控制播放,查找到
http://www.videolan.org/doc/play-howto/ ... l#id501902
可以用vlc -I rc --rc-host=XXX:XX的方式启动socket连接,但是最后的代码始终无法通过,会提示
Traceback (most recent call last):
File "vlctest.py", line 15, in <module>
s.connect(('localhost', 8888))
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused
使用subprocess.Popen替代os.system错误相同。事实上我是先用subprocess启动vlc然后报错,考虑到可能是启动顺序问题,才改用os.system+time.sleep的……
终端可以确认发生错误时vlc已经启动了。
而且,如果直接执行代码,第一次执行会提示上面的错误,但是因为except发生后直接退出了,所以vlc仍然在后台执行;然后在后台的vlc活着的情况下再次执行代码,一样还是connect refused,然后后台会继续躺着俩VLC进程……
但如果先在另一个终端里执行VLC,那么直接执行代码就能成功……总之就是在python 中启动vlc总是会杯具……
考虑了很久仍百思不得其解,特来求助,希望有熟悉的高手能够给予解答……

附测试代码:

代码: 全选

#!/usr/bin/env python

import os, time, socket

f = '/media/ENTER/Video/3days_op.avi'

def cmd(s, string):
    print 'cmd %s' %string
    s.send('%s\n' %string)

if __name__=='__main__':
    os.system('/usr/bin/cvlc -I rc --rc-host=localhost:8888 & ')
    time.sleep(7)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 8888))
    cmd(s, "add '%s'" %f)
    time.sleep(10)
    cmd(s, "pause")
    time.sleep(5)
    cmd(s, "quit")
    s.close()
    #os.system('killall vlc')
    
头像
skydark
帖子: 24
注册时间: 2009-03-31 8:12
送出感谢: 0
接收感谢: 1 次

Re: [Python]使用socket方式连接vlc提示connect refuse

#2

帖子 skydark » 2010-12-07 10:35

问题解决了,和python和socket这边无关,是我用cvlc的问题:

代码: 全选

$ cat /usr/bin/cvlc
#! /bin/sh
exec /usr/bin/vlc -I "dummy" "$@"
把代码中的
os.system('/usr/bin/cvlc -I rc --rc-host=localhost:8888 & ')
替换为
subprocess.Popen(['/usr/bin/vlc', '-I', 'dummy', '-I', 'rc', '--rc-host=localhost:8888'])
就可以了…… :em06
回复

回到 “Python/Php/Perl”