从文本文件执行管道命令

时间:2013-11-11 21:11:44

标签: python multithreading subprocess popen readlines

我有一个文本文件 (songs.txt) ,其中包含许多看起来像下面引用文字的行。我想要的是从左侧拆开左侧。双方将根据他们对&&&&&&& 的支持来确定。搜索字符串和歌曲长度分为两部分。 例如:

  

Don Diablo - M1 stinger&&&&&& 204

左侧部分&&&&&&& 右侧的文字,以及右侧部分&&&&&&&

的正确部分
  

左侧Don Diablo - M1 stinger

     

正确部分204

此后,这些命令可以通过PIPE执行。 文本文件中每行有两个命令,然后是与右边部分相同长度的延迟(歌曲长度,以秒为单位)。

例如:

search Don Diablo - M1 stinger

play 1

现在将在同样的204秒休息。然后它从文件中获取下一行。喜欢并且一直如此。

问题是,我在Python中玩了一下,现在我真的没有任何线索。我已经阅读了一些解决方案,但它们并没有像我那样有用。

如果有人能告诉我如何在实践中做到这一点,我会很高兴吗?是否可能?

如果有人会对此进行攻击,那么您可以使用songs.txt

注意:我使用的是Python 2.7.4

1 个答案:

答案 0 :(得分:1)

我不清楚'管道'命令的含义,但我认为解决方案有三个关键要素:

  1. 在Python中,文件是“可迭代的”,这意味着您可以在for循环的右侧使用打开(文本)文件,它将遍历文件的行:

    for line in open('songs.txt'):
    
  2. 使用字符串对象的partition方法可以分割线的左侧和右侧:

        left, sep, right = line.partition('&&&&&&')
    

    请注意,'right'元素将包含行结束字符,leftright可能包含其他空格。您可能希望使用strip删除所有这些内容。

        left = left.strip()
        right = right.strip()
    
  3. 实际上运行命令应该可以使用subprocess来完成,{{3}}可以处理阻塞调用(使用callcheck_call)或在后台运行命令,并使用{ {1}}。请注意,所有这些命令都需要一个参数列表而不仅仅是一个命令行字符串 - 子流程文档应该在这里提供帮助。