我正在尝试创建一个脚本,它使用几个不同的命令运行另一个python脚本。我想验证一个用户并搜索该用户给出的歌曲。然后脚本验证spotify帐户,搜索给定的歌曲,然后播放它。在
以下是何时进行身份验证和重新通知的外观:
python respotify.py john doe
搜索歌曲:
^{pr2}$在指定数量的搜索后播放一首歌曲,结果将是:
play 1
我知道在我的播放.py文件:
import os
os.system = ("search Wrecking Ball")
但我要我的“播放.py“运行回复.py在后台。我试过把这个放在回复.py函数,以便在脚本开始时可以调用一首歌曲。在
import os
os.system = "search Wrecking Ball"
我试过了,但我的剧本会忽略它。在
但我认为这比那更复杂。你可以找到回复.pyhere:
感谢nickie马上解决我的问题
他的回答是:
from subprocess import Popen, PIPE
p = Popen(["python", "respotify.py", "john", "doe"], stdin=PIPE, stdout=PIPE)
print >> p.stdin, "search Wrecking Ball"
output = p.communicate()[0]
但我的控制台出现了一个错误:
File "respotify.py", line 338, in <module> command_loop() File "respotify.py", line 29, in command_loop command = raw_input().split(" ") EOFError: EOF when reading line
如何修复上面的错误?在
尝试与CLI脚本交互—发送命令、等待响应和提示等—是一件棘手的事。有一些像^{} 这样的库可以让您更轻松,但仍然不容易。在
但幸运的是,你不必这么做。
respotify
显然可以作为模块而不是脚本使用,因此,与其尝试生成输入来馈送它以便它能够解析它等等,只需导入它并直接使用它。在或者,更简单地说,
respotify
中的所有代码都很简单,至少与尝试通过CLI进行交互一样简单。所以直接使用Spotify模块。在并不像你想的那样。你想要吗
^{pr2}$注意,现代的方法是
^{3}$os.system
和{并向它提供输入,就像给它的
^{pr2}$stdin
,它将包含以下行:这可以通过以下代码完成:
^{3}$或者,如果要提供的输入依赖于子进程提供的输出,则可以打印到}读取。在
p.stdin
并从{请检查
subprocess
模块的documentation,以获取更多详细信息。在如果子进程的通信协议很复杂,那么绝对应该使用比这更好的东西,比如@aberner建议的^{} 库。在
相关问题 更多 >
编程相关推荐