-2

我正在编写一个小型 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

问题可能出在哪里?

4

2 回答 2

0

在最近的 Python 版本中,os.popen()它只是一个包装器,subprocess.Popen()它只是启动一个进程。

你可能想要

from subprocess import run
with open('test.bin', 'wb') as bin:
    run(["curl", url], stdout=bin, check=True)

subprocess.run()是一个更高级别的包装器,它负责运行子进程以完成并正确等待它完成等,Popen()因此os.popen()不会这样做。

有关更多详细信息,另请参阅在 Python 中运行 Bash 命令

于 2019-02-07T14:21:46.633 回答
0

我运行了你的代码,我相信你在文件名之前的代码中有一个不必要的 " 并且 python 将 test.bin 作为变量读取,而不是 os.popen 中的字符串......

os.popen("curl "+url+" > test.bin")

这对我有用,我希望它有帮助:)

于 2019-02-07T14:25:16.770 回答