为了账号安全,请及时绑定邮箱和手机立即绑定

使用 runcmd 提取推文信息时出现问题

使用 runcmd 提取推文信息时出现问题

汪汪一只猫 2023-06-27 10:46:51
我试图让这段代码从任何提到我的 Twitter 句柄的推文中提取媒体,通过子进程模块使用 ffmpeg 对其进行转换,然后将转换后的媒体作为回复发送回该人。import tweepyfrom tweepy import Streamfrom tweepy.streaming import StreamListenerfrom datetime import datetimeimport timeimport subprocessstdout = subprocess.PIPEdef runcmd(cmd):    x = subprocess.Popen(cmd, stdout=subprocess.PIPE)    return x.communicate(stdout)import jsonimport randomclass StdOutListener(StreamListener):    def on_data(self, data):        clean_data = json.loads(data)        tweetId = clean_data['id']        tweet_name = clean_data['user']['screen_name']        tweet_media = clean_data['entities']['media'][0]['media_url']        print(tweet_media)        tweet_photo = runcmd('ffmpeg -i', tweet_media, 'output.jpg')        tweet = 'Here ya go'        now = datetime.now()        dt_string = now.strftime("%d/%m/%Y %H:%M:%S")        print(' Reply sent to @'+tweet_name, 'on', dt_string, '\n' ' Message:', tweet, '\n')        respondToTweet(tweet_media, tweet, tweetId)但我总是会遇到这个错误:Exception has occurred: TypeErrorruncmd() takes 1 positional argument but 3 were given   tweet_photo = runcmd('ffmpeg -i', tweet_media, 'output.jpg')显然,我不能介于tweet_media两者之间ffmpeg -i,output.jpg那么我该如何进行tweet_media无错误的转换呢?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

如果您想保持通话原样,您需要这样的东西:

def runcmd(*cmd):
    x = subprocess.Popen([*cmd], stdout=subprocess.PIPE) 
       return x.communicate(stdout)

进一步说明:Popen()将命令作为单词列表运行。因此,有两个 Python 特性需要使用。

  1. def runcmd(*cmd):这表示该函数接受任意参数列表,并将它们存储为cmd元组,因此调用runcmd('ffmpeg', '-i', tweet_media, 'output.jpg')结果为cmdequaling ('ffmpeg', '-i', tweet_media, 'output.jpg')

  2. Popen将表示要运行的命令的字符串列表作为第一个参数。因此,首先*cmd将元组展开为元素,然后[*cmd]将元素放入列表中,这样我们就得到了所需的调用['ffmpeg', '-i', tweet_media, 'output.jpg']

注意:指定'ffmpeg -i'为列表的第一个元素会Popen搜索名为 的可执行文件ffmpeg<SPACE>-i,该可执行文件很可能不存在,因此您应该使用'ffmpeg', '-i'它。


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号