为什么subprocess.call("xdotool key XF86AudioPlay")
中的do_GET
只持续我的http请求期间?
我正在尝试通过http请求在本地计算机上播放/暂停Spotify。即。收到请求后,模拟按键。
当我按下localhost:8002
时-音乐播放了大约200毫秒,但请求完成后,音乐就停止了。
import http.server
import socketserver
import subprocess
MYCMD = "xdotool key XF86AudioPlay"
PORT = 8002
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
# Send the html message
subprocess.call(MYCMD, shell=True)
self.wfile.write(b'works')
return
Handler = MyRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
答案 0 :(得分:0)
这确实没有道理。
通常subprocess.call()等待调用过程完成。
在您的示例中,只是模拟在服务器的xwindows上按下一个键。 您可以模拟按下一个按键来切换音频的播放。
我期望的是,您将以某种方式执行两个http请求。 第一个开始音频,第二个停止音频。
这两个请求的执行时间可能会延迟20毫秒左右。
我建议在子流程调用之前添加以下行
with open("/tmp/mylogfile.log", "a") as fout:
fout.write("call subprocess")
以及子流程调用后的以下两行。
with open("/tmp/mylogfile.log", "a") as fout:
fout.write("called subprocess")
我很确定,您将看到两个而不是一个请求。