如何在另一个带参数的python脚本中运行函数?

2024-10-06 11:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个脚本,它使用几个不同的命令运行另一个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

如何修复上面的错误?在


Tags: 用户pyimport脚本searchoslinejohn
3条回答

尝试与CLI脚本交互—发送命令、等待响应和提示等—是一件棘手的事。有一些像^{}这样的库可以让您更轻松,但仍然不容易。在


但幸运的是,你不必这么做。respotify显然可以作为模块而不是脚本使用,因此,与其尝试生成输入来馈送它以便它能够解析它等等,只需导入它并直接使用它。在

或者,更简单地说,respotify中的所有代码都很简单,至少与尝试通过CLI进行交互一样简单。所以直接使用Spotify模块。在

os.system = ("search Wrecking Ball")

并不像你想的那样。你想要吗

^{pr2}$

注意,现代的方法是

^{3}$

os.system和{}都在子进程中执行程序,就像从命令行执行一样。如果我理解正确,您需要执行以下命令:

python respotify.py john doe

并向它提供输入,就像给它的stdin,它将包含以下行:

^{pr2}$

这可以通过以下代码完成:

^{3}$

或者,如果要提供的输入依赖于子进程提供的输出,则可以打印到p.stdin并从{}读取。在

from subprocess import Popen, PIPE

p = Popen(["python", "respotify.py", "john", "doe"], stdin=PIPE, stdout=PIPE)
print >> p.stdin, "search Wrecking Ball"
output = p.stdout.readline()
print >> p.stdin, "play 1"
print >> p.stdin, "quit"
p.wait()

请检查subprocess模块的documentation,以获取更多详细信息。在

如果子进程的通信协议很复杂,那么绝对应该使用比这更好的东西,比如@aberner建议的^{}库。在

相关问题 更多 >