我正在编写一个小的python脚本,在这里我还想通过使用 os.opopen()执行一些bash命令。我想将输出保存到文件,但是不起作用。我以前用过“>”,它始终有效。
我的代码:
curl https://r2---sn-4g5e6ne6.googlevideo.com/videoplayback?key=yt6&txp=5432432&mime=video%2Fwebm&pl=16&source=youtube&gir=yes&signature=6A07D1659991EC9A570BC6A0E9C10FB54E743DBC.DA7798D03282620987FC2FBDB020D3FE464851F3&fvip=2&requiressl=yes&sparams=aitags%2Cclen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Ckeepalive%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Crequiressl%2Csource%2Cexpire&ei=sTFcXPqmN9PlgAeN6ZiYCQ&itag=247&ipbits=0&mm=31%2C26&mn=sn-4g5e6ne6%2Csn-i5heen7l&c=WEB&id=o-AHSObPeCuNcs7m1xagNdnC7zcHOvQEKkCrV9NDTw7g7a&initcwndbps=1722500&ip=132.187.12.151&clen=64580535&mt=1549545753&mv=m&dur=561.594&ms=au%2Conr&keepalive=yes&expire=1549567506&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278&lmt=1541003190670111&ratebypass=yes > test.bin
bash命令本身可以正常工作。
我使用的Python命令:
os.popen("curl "+url+" > "test.bin") #url predefined
有什么想法可以解决问题吗?
答案 0 :(得分:0)
在最新版本的Python中,os.popen()
只是ServiceConnection.onServiceConnected()
的包装,它只是启动一个进程。
您可能想要
subprocess.Popen()
subprocess.run()
是一个更高级别的包装器,负责运行子流程以使其完成并适当地等待其完成,等等。from subprocess import run
with open('test.bin', 'wb') as bin:
run(["curl", url], stdout=bin, check=True)
从而Popen()
并不这样做。
有关更多详细信息,另请参见Running Bash commands in Python
答案 1 :(得分:0)
我运行了您的代码,我相信您的代码中有一个不必要的“”,文件名和python会将test.bin读取为变量,而不是os.popen中的字符串...
os.popen("curl "+url+" > test.bin")
这对我有用,希望对您有所帮助:)