Python 子进程与原始输入

0 投票
2 回答
736 浏览
提问于 2025-04-18 11:46

好的,谢谢大家的帮助。我还有第二个问题。我想在观看直播的时候聊天,这可以通过IRC实现。服务器是 irc.twitch.tv,频道名和直播者的名字是一样的。当我尝试这个代码时,出现了错误。

# -*- coding: latin-1 -*-  
import subprocess  
print(35*"+")  
name = raw_input("Livestreamer name\n")  

hostVideo = subprocess.Popen(['livestreamer', 'twitch.tv/'+name, 'best'], stdout  =        subprocess.PIPE).communicate()[0]  
hostIrssi = subprocess.Popen(['irssi --connect=irc.twitch.tv --password=oauth:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --nick=nickname'], stdout = subprocess.PIPE).communicate()[0]  

print hostVideo
print hostIrssi

这是我收到的错误信息

Traceback (most recent call last):
File "Livestreamer.py", line 7, in <module>
hostIrssi = subprocess.Popen(['irssi --connect=irc.twitch.tv --password=oauth:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --nick=nickname'], stdout = subprocess.PIPE).communicate()[0]
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
 File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

另外,如果可以的话,告诉我怎么才能自动加入正确的频道。

我之前的帖子

我喜欢看Twitch的直播,我想写一个脚本,让它询问直播者的名字,然后把命令发送到终端。直播者的命令是这样的:

livestreamer twitch.tv/user best  

所以脚本必须在直播者命令后加上“twitch.tv/”,在用户名后加上“best”。我的代码看起来是这样的:

# -*- coding: latin-1 -*-
import subprocess
user = raw_input("Livestreamers name:\n")
livestreamer = "livestreamer twitch.tv/"
host = subprocess.Popen(['livestreamer', 'twitch.tv/', user, 'best'], stdout = subprocess.PIPE).communicate()[0]

print host

输出是

livestreamer: error: unrecognized arguments:  best

如果有人知道哪里出错了,我会非常感激。同时抱歉我的英语不好。:)

2 个回答

1

你的子进程命令是这样的:

livestreamer twitch.tv/ user best  

这条命令会启动一个进程,像你给的例子那样:

subprocess.Popen(['livestreamer', 'twitch.tv/%s' % user, 'best'], stdout = subprocess.PIPE).communicate()[0]
2

你需要把 "twitch.tv/" 和用户名连接在一起,所以你最后的代码应该是

host = subprocess.Popen(['livestreamer', 'twitch.tv/'+user, 'best'], stdout=subprocess.PIPE).communicate()[0]

另外,注意一下,关键字参数(name=value)在等号周围最好不要有空格,这样更符合Python的风格指南,具体可以参考PEP 8

撰写回答